Questions tagged «.net»

请勿使用有关.NET Core的问题,而应使用[.net-core]。.NET框架是主要为Microsoft Windows操作系统设计的软件框架。它包括基类库,公共语言运行时(通常称为CLR),公共类型系统(通常称为CTS)和动态语言运行时的实现。它支持多种编程语言,包括C#,VB.NET,F#和C ++ / CLI。

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 




30
URL的Path.Combine吗?
Path.Combine很方便,但是.NET框架中有类似的URL功能吗? 我正在寻找这样的语法: Url.Combine("http://MyUrl.com/", "/Images/Image.jpg") 这将返回: "http://MyUrl.com/Images/Image.jpg"
1242 c#  .net  asp.net  url  path 


8
如何使用反射调用泛型方法?
当类型参数在编译时未知,而是在运行时动态获取时,调用通用方法的最佳方法是什么? 考虑下面的示例代码-内部Example()方法,什么是最简洁的方式来调用GenericMethod&lt;T&gt;()使用Type存储在myType变量? public class Sample { public void Example(string typeName) { Type myType = FindType(typeName); // What goes here to call GenericMethod&lt;T&gt;()? GenericMethod&lt;myType&gt;(); // This doesn't work // What changes to call StaticMethod&lt;T&gt;()? Sample.StaticMethod&lt;myType&gt;(); // This also doesn't work } public void GenericMethod&lt;T&gt;() { // ... } public static void …
1069 c#  .net  generics  reflection 

21
如何以及何时使用“异步”和“等待”
根据我的理解async,await要做的主要事情之一就是使代码易于编写和阅读-但是使用它们是否等同于产生后台线程来执行长时间逻辑? 我目前正在尝试最基本的示例。我在行中添加了一些评论。你能为我澄清一下吗? // I don't understand why this method must be marked as `async`. private async void button1_Click(object sender, EventArgs e) { Task&lt;int&gt; access = DoSomethingAsync(); // task independent stuff here // this line is reached after the 5 seconds sleep from // DoSomethingAsync() method. Shouldn't it be reached immediately? …


23
数据表上的LINQ查询
我试图对DataTable对象执行LINQ查询,但奇怪的是,我发现对DataTables执行此类查询并不简单。例如: var results = from myRow in myDataTable where results.Field("RowNo") == 1 select results; 这是不允许的。如何获得类似的效果? 我很惊讶在数据表上不允许使用LINQ查询!
1031 c#  .net  linq  datatable  .net-3.5 



14
按多列分组
如何在LINQ中对多个列进行分组 在SQL中与此类似: SELECT * FROM &lt;TableName&gt; GROUP BY &lt;Column1&gt;,&lt;Column2&gt; 如何将其转换为LINQ: QuantityBreakdown ( MaterialID int, ProductID int, Quantity float ) INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quantity) SELECT MaterialID, ProductID, SUM(Quantity) FROM @Transactions GROUP BY MaterialID, ProductID
967 c#  .net  linq  group-by  aggregate 



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.