Questions tagged «c#»

C#(发音为“ See Sharp”)是由Microsoft开发的一种高级,静态类型的多范例编程语言。C#代码通常针对Microsoft的.NET系列工具和运行时,其中包括.NET Framework,.NET Core和Xamarin。使用此标记可解决有关用C#或C#正式规范编写的代码的问题。

4
C#在foreach中重用变量是否有原因?
在C#中使用lambda表达式或匿名方法时,我们必须警惕对修改后的闭包陷阱的访问。例如: foreach (var s in strings) { query = query.Where(i => i.Prop == s); // access to modified closure ... } 由于修改了闭包,因此上述代码将导致Where查询中的所有子句都基于的最终值s。 正如解释在这里,这是因为该s变量在声明foreach环以上的编译器编译如下: string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... } 而不是像这样: while (enumerator.MoveNext()) { string s; s = enumerator.Current; ... } 如此处所指出的,在循环外声明变量没有任何性能优势,在正常情况下,我能想到的唯一原因是如果您打算在循环范围外使用变量: string s; while (enumerator.MoveNext()) { …

19
正确使用IDisposable接口
通过阅读Microsoft文档,我知道IDisposable接口的“主要”用途是清理非托管资源。 对我来说,“非托管”意味着诸如数据库连接,套接字,窗口句柄之类的东西。但是,我已经看到了Dispose()实现该方法以释放托管资源的代码,这对我来说似乎是多余的,因为垃圾收集器应该处理为你。 例如: public class MyCollection : IDisposable { private List<String> _theList = new List<String>(); private Dictionary<String, Point> _theDict = new Dictionary<String, Point>(); // Die, clear it up! (free unmanaged resources) public void Dispose() { _theList.clear(); _theDict.clear(); _theList = null; _theDict = null; } 我的问题是,这是否会使垃圾收集器释放可用内存的MyCollection速度比正常情况更快? 编辑:到目前为止,人们已经发布了一些使用IDisposable清理数据库,数据库连接和位图等非托管资源的良好示例。但是假设_theList在上面的代码中包含上百万字符串,你想释放内存现在,而不是等待垃圾回收器。上面的代码能做到吗?


30
我该如何解决“断点当前不会被击中。该文档尚未加载任何符号。” 警告?
速成版上的C#桌面应用程序正常工作,然后5秒钟后不工作。 我尝试了以下方法: 确保在所有程序集上都设置了调试配置,调试标志和完整的调试信息。 从我的整个计算机上删除所有与项目相关的bin和obj文件夹以及所有DLL。 重新创建引起问题的项目。 重启。 我在解决方案中有两个WinForms项目。其中一个加载调试信息,一个不加载。它们都引用我正试图以完全相同的方式在项目文件中获取调试信息的程序集。有任何想法吗? 我想在这里添加,主要是为我自己添加,当我再次回顾此问题时,符号将在加载程序集之前加载,并且在需要时才加载。如果该断点位于仅在主程序集中的一个函数中使用的库中,则在调用该函数之前,不会加载符号(并且该断点将被显示为未命中)。


14
类型检查:typeof,GetType还是?
我见过很多人使用以下代码: Type t = typeof(obj1); if (t == typeof(int)) // Some code here 但我知道您也可以这样做: if (obj1.GetType() == typeof(int)) // Some code here 或这个: if (obj1 is int) // Some code here 就个人而言,我觉得最后一个是最干净的,但是我缺少什么吗?哪一种是最佳使用方式,还是个人喜好?
1511 c#  types  typeof  gettype 

5
尝试捕获加快我的代码?
我编写了一些代码来测试try-catch的影响,但是看到了一些令人惊讶的结果。 static void Main(string[] args) { Thread.CurrentThread.Priority = ThreadPriority.Highest; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; long start = 0, stop = 0, elapsed = 0; double avg = 0.0; long temp = Fibo(1); for (int i = 1; i < 100000000; i++) { start = Stopwatch.GetTimestamp(); temp = Fibo(100); stop = Stopwatch.GetTimestamp(); elapsed …

30
C#的隐藏功能?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 从这个问题中学到以下内容后,我想到了这一点: where T : struct 我们C#开发人员都知道C#的基础知识。我的意思是声明,条件,循环,运算符等。 我们中有些人甚至掌握了泛型,匿名类型,lambdas,LINQ等... 但是,即使C#爱好者,成瘾者,专家也几乎不知道C#最隐藏的功能或技巧是什么? 到目前为止,这里是一些揭示的功能: 关键词 yield通过迈克尔·斯托姆 var通过迈克尔·斯托姆 using()科科斯的声明 readonly由kokos as由Mike Stone as/ 埃德·斯旺格is(Ed Swangren) as/ is(由Rocketpants改进) default通过鼠的死亡 global::通过pzycoman using()由块AlexCuse volatile由的JakubŠturc extern alias由的JakubŠturc 属性 DefaultValueAttribute通过迈克尔·斯托姆 ObsoleteAttribute由DannySmurf DebuggerDisplayAttribute由Stu DebuggerBrowsable并DebuggerStepThrough通过bdukes ThreadStaticAttribute通过marxidad FlagsAttribute马丁·克拉克(Martin Clarke) ConditionalAttribute由AndrewBurns 句法 ??(coalesce null)运算符by kokos Nick Berardi的举报 where T:new由LarsMæhlum Keith的隐式泛型 Keith的一参数lambda Keith的汽车属性 …
1475 c#  hidden-features 

12
C#中的[Flags]枚举属性是什么意思?
我不时看到如下枚举: [Flags] public enum Options { None = 0, Option1 = 1, Option2 = 2, Option3 = 4, Option4 = 8 } 我不明白该[Flags]属性的确切作用。 任何人都可以发表很好的解释或榜样吗?
1445 c#  enums  flags 


27
为什么不继承List <T>?
在计划程序时,我通常会像这样思考: 足球队只是足球运动员的名单。因此,我应该用: var football_team = new List&lt;FootballPlayer&gt;(); 该列表的顺序代表了球员在名单中的排列顺序。 但是后来我意识到,除了仅列出球员名单以外,球队还具有其他属性,必须加以记录。例如,本赛季的总得分,当前预算,统一的颜色,string代表球队名称的a 等。 所以我想: 好的,足球队就像一个球员名单,但另外,它还有一个名称(a string)和一个总得分(an int)。.NET没有提供用于存储足球队的课程,因此我将创建自己的课程。最相似,最相关的现有结构是List&lt;FootballPlayer&gt;,因此我将从中继承: class FootballTeam : List&lt;FootballPlayer&gt; { public string TeamName; public int RunningTotal } 但事实证明,指南指出您不应继承List&lt;T&gt;。我对该指南在两个方面完全感到困惑。 为什么不? 显然List在某种程度上针对性能进行了优化。为何如此?如果我扩展,会导致什么性能问题List?到底会破裂什么? 我看到的另一个原因List是Microsoft提供的,并且我无法控制它,因此在公开“公共API”之后,以后不能更改它。但是我很难理解这一点。什么是公共API,我为什么要关心?如果我当前的项目没有并且不太可能拥有此公共API,那么我可以安全地忽略此指南吗?如果我确实继承自我,List 而事实证明我需要一个公共API,我会遇到什么困难? 为什么如此重要?列表就是列表。有什么可能改变?我可能要更改什么? 最后,如果Microsoft不希望我从那里继承List,他们为什么不上课sealed? 我还应该使用什么? 显然,对于自定义集合,Microsoft提供了一个Collection应该扩展而不是的类List。但这个类是非常裸露,并没有多少有用的东西,比如AddRange,例如。jvitor83的答案提供了该特定方法的性能原理,但是慢AddRange不是没有总比没有更好AddRange? 从Collection继承比从继承进行的工作量更大List,我看不出任何好处。毫无疑问,Microsoft不会无缘无故地告诉我做额外的工作,所以我不禁会觉得自己在某种程度上误解了某些东西,而继承Collection实际上并不是解决我的问题的正确方法。 我已经看到了诸如实施的建议IList。就是不行。这是几十行样板代码,对我毫无帮助。 最后,有些人建议将包裹起来List: class FootballTeam { public List&lt;FootballPlayer&gt; Players; } 这有两个问题: 它使我的代码不必要地冗长。我现在必须打电话,my_team.Players.Count而不仅仅是my_team.Count。幸运的是,使用C#,我可以定义索引器以使索引透明化,并转发内部的所有方法List……但这就是很多代码!我能从所有工作中得到什么? 只是没有任何意义。一支足球队没有“拥有”球员名单。这是球员名单。您不会说“ John McFootballer已加入SomeTeam的球员”。您说“约翰加入了SomeTeam”。您没有在“字符串的字符”中添加字母,而是在字符串中添加了字母。您没有将书添加到图书馆的书中,而是将书添加到图书馆。 …
1398 c#  .net  list  oop  inheritance 



28
何时使用struct?
什么时候应该在C#中使用struct而不是class?我的概念模型是当项目仅仅是值类型的集合时使用结构。一种逻辑上将它们组合在一起的方法。 我在这里遇到了这些规则: 结构应代表单个值。 结构的内存占用量应少于16个字节。 创建后不应更改结构。 这些规则有效吗?结构在语义上是什么意思?
1390 c#  struct 

17
静态只读与常量
我已阅读有关const和static readonly领域。我们有一些仅包含常量值的类。用于我们系统中的各种事物。所以我想知道我的观察是否正确: 这些常量值是否应该始终static readonly适用于所有公开的东西?并且仅const用于内部/受保护/私有值吗? 您有什么推荐的吗?我是否应该甚至不使用static readonly字段,而应该使用属性?
1386 c#  constants 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.