我无法理解使用XML注释的优点.我知道它们可以转换成代码外部的漂亮文档,但使用更简洁的DOxygen语法可以实现相同的目标.在我看来,XML注释是错误的,因为:
那可能是什么原因,为什么XML在.NET中更受欢迎而不是简单的DOxygen语法?
据我所知,语句Debug.WriteLine()不会留在Release版本的代码中.另一方面,Trace.WriteLine()将保留在Release版本中的代码中.是什么控制了这种行为?在定义System.Diagnostics.Debug时,C#编译器是否忽略了类中的所有内容DEBUG?
我只是想了解C#的内部并且只是好奇.
我正在控制加载数据时显示动画.线程完成后,我隐藏动画并显示控件.所以我从一个线程执行这个代码:
protected void InvokeEnableBackControl()
{
if (this.InvokeRequired)
{
this.Invoke(new OpHandler(EnableBackControl));
}
else
{
EnableBackControl();
}
}
Run Code Online (Sandbox Code Playgroud)
有时,当我执行此代码时,主线程在以下代码中被挂起:
protected virtual void EnableBackControl()
{
if (overlayAnimation.TargetControl != null)
{
overlayAnimation.TargetControl.BringToFront();
}
overlayAnimation.SendToBack();
overlayAnimation.Enabled = false;
overlayAnimation.Visible = false;
Run Code Online (Sandbox Code Playgroud)
}
我不确定它是否被绞死设置Enable或Visible属性.您是否知道任何可能会将应用程序调用这些属性的情况Control.Invoke?
我的问题是你如何教授整理和重构代码的方法和重要性?
我最近正在为一位同事进行代码审查.他们对长期以来的同事工作进行了一些修改.在新的更改过程中,我的同事试图重构项目,但是一旦遇到崩溃或其他问题就放弃了(而不是在洞中追逐兔子以找到问题的根源),因此重新实现了问题代码和在此基础上建立更多.这使得代码处理了大量的变通方法和魔术数字,所以我和他们一起坐下来重构它.
我试图解释我是如何识别我们可以重构的地方以及每次重构如何经常突出新区域.例如,有两个变量存储相同的信息 - 为什么?我猜想这是一个更大问题的解决办法,所以我拿出一个变量,把兔子赶到了洞里,发现了其他问题.这最终导致我们发现了一个问题,即我们多次循环相同的事情.这在很大程度上归因于使用魔术数字大小的数组来模糊正在做的事情 - 修复最初的"双变量"问题导致了这一发现(以及其他).
当我和我的同事一起进行这次重构之旅时,显然她并不总是能够理解为什么我们做出某些改变以及我们如何确保新功能与原始功能相匹配,所以我花时间来解释和证明每个更改都通过与早期版本进行比较并逐步完成纸上的更改.我还通过示例解释了如何判断重构选择是否是一个坏主意,何时选择注释而不是代码更改,以及如何选择好的变量名称.
我觉得坐在一起做这个的过程对我自己来说是值得的(我需要学习更多关于如何最好地向他人解释的事情)和我的同事(他们更多地了解我们的代码和我们的编码实践)但是,经验让我想知道是否有更好的方法来教授重构过程.
我理解什么需要或不需要重构,以及如何重构它是非常主观的所以我想避开讨论,但我有兴趣了解其他人如何应对教授这项重要技能的挑战,以及其他人这里有类似的经历和他们从中学到的东西(无论是老师还是学生).
在另一个问题中,我询问了为某些运行时编译器部署本地化UserControl的问题.但是,在我可以部署本地化之前,我需要一种本地化控件的方法.
控件由我们自己的WinForms风格的设计器创建(使用.NET对设计图面的支持等),并保存为二进制格式,将CodeCompileUnit资源resx和用户源组合到一个文件中.然后,这些文件在运行时由另一个工具适当地编译到程序集中.
为了本地化这些,我们需要告诉设计者和序列化,可本地化的属性值将存储在资源中.VisualStudio WinForms设计器使用名为的扩展属性Localizable和用于指定默认区域性的关联属性来执行此操作.如果可能的话,我们在自定义设计器中需要这个属性.
我们需要我们的独立设计器工具,它易于用于非开发人员类型以及限制某些操作,因此使用Visual Studio的免费版本(即C#Express)是行不通的(我已经支持它并且失败了) ; 因此,我们如何本地化这些UserControl需要的任何解决方案来弥补这一点.
我们可以在我们的自定义WinForms设计器中获得Localizable支持吗?
UserControl的?例如,以某种方式后处理,不同的文件格式等.localization internationalization windows-forms-designer winforms c#-2.0
我正在开发一个Silverlight客户端和相关的ASP.NET Web服务(而不是WCF),我需要实现一些包含用户首选项的功能,例如"喜欢的项目"系统以及他们是否喜欢自动换行.为了获得愉快(而非令人愤怒)的用户体验,我希望在会话中保留这些设置.一项简短的调查表明,有两种主要可能性.
我意识到选项2可能是最好的选择,因为它确保即使用户禁用Silverlight的独立存储,他们的首选项仍然存在,但我想避免此时维护数据库的负担,我喜欢这个想法即使服务器连接不可用,首选项也可用于加载和编辑.但是,我对合理的论据持开放态度,为什么现在而不是以后可能更喜欢这种打击.
在任一场景中,我正在寻找的是关于实现设置持久性的最佳方法的建议.例如,如果使用了独立存储,我应该使用XML格式还是其他文件布局来保存设置; 如果使用数据库方法,我是否必须设计一个设置表,或者ASP.NET中是否有内置机制来支持这一点,以及如何向客户端提供首选项?
所以:
哪种解决方案是用户偏好持久性的更好解决方案?如何在该解决方案中保留设置,以及客户端如何访问和更新它们?
请注意,我已就此事进行了一些先前的研究,并发现了以下链接,这些链接似乎主张根据您阅读的文章解决方案.
事实证明,微软已经将隔离存储中的设置持久性作为Silverlight的内置部分提供(我在实现替代方案之前不知何故错过了它).我在下面的回答有更多细节.
即使微软提供客户端设置持久性,我仍然保持这个问题的开放性,但这并不一定意味着这是保持用户偏好的最佳方法,我想就此提出更多意见和建议.
我正在尝试使用LINQ从字典中检索一些数据.
var testDict = new Dictionary<int, string>();
testDict.Add(1, "Apple");
testDict.Add(2, "Cherry");
var q1 = from obj in testDict.Values.Where(p => p == "Apple");
var q2 = from obj in testDict.Where(p => p.Value == "Apple");
Run Code Online (Sandbox Code Playgroud)
上面的行q1和q2都导致编译器错误.
error CS0742: A query body must end with a select clause or a group clause
Run Code Online (Sandbox Code Playgroud)
如何使用LINQ在字典中查找值?
谢谢,
干草堆
我们必须了解我们(或第三方,可能是CLR本身)代码的哪一部分导致整数拳击.
我们有一个相当大的应用程序,我们观察到System.Int32实例的高分配率.在Memory Profiler的帮助下,我们看到了少量长期存在的Int32实例(确切地说是18个)和Int32每秒20-25千个分配.所有这些对象都是GC收集为Gen0对象,系统没有内存泄漏,可以运行很长时间.创建内存快照时,GC会在快照之前执行,因此快照不包含这些"临时"对象的任何跟踪.
我们所有的代码都是专门为消除拳击而编写的,而且"按设计"我们根本不会看到拳击.因此我们怀疑它是我们的代码中的一些未消除的遗忘拳击,或由第三方组件和/或CLR类型本身引起的装箱.
系统使用VS2008编译,并使用.Net 3.5(测量在调试和发布版本中完成,具有相同的行为).
我们如何(使用windbg,VS2008,Memory Profiler,AQTime或任何其他商用产品)检测拳击发生的原因?
记录依赖属性的最佳方法是什么?
我应该在字段上放置xml文档:
/// <summary>Documentation goes here</summary>
public static readonly DependencyProperty NameProperty =
DependencyProperty.Register(...)
Run Code Online (Sandbox Code Playgroud)
或在酒店:
/// <summary>and/or here?</summary>
public string Name{ get{...} set{...} }
Run Code Online (Sandbox Code Playgroud)
还是我真的需要记录(和维护)两者?
sandcastle silverlight wpf dependency-properties xml-documentation
c# ×6
.net ×3
winforms ×2
asp.net ×1
c#-2.0 ×1
clr ×1
css ×1
debugging ×1
doxygen ×1
lambda ×1
linq ×1
localization ×1
persistence ×1
preferences ×1
refactoring ×1
sandcastle ×1
silverlight ×1
wpf ×1
xml-comments ×1