草庐IT

thread_siblings_list

全部标签

c# - Visual Studio 代码分析规则 - "Do not expose generic lists"

Donotexposegenericlists如果我所有的方法都需要公开一个集合,那么我需要使用LinqExtension.ToList(),几乎所有我需要使用列表的地方,或者我所有代码中的用户集合。如果是这样的话,.ToList()是在忽略规则吧?或者是否有一种技术,例如复制列表o来解决违规问题并仍然返回列表? 最佳答案 我禁用了该规则,因为我觉得它无效。如果你想返回一个包含O(1)的集合count并且不是对内部字段的直接引用,List是最好的选择。我不太了解您的情况,但听起来您有一种方法可以返回对某些内部数据的LINQ查询。如果

c# - List<T> 到 DataView

如何将List转换为.Net中的数据View。 最佳答案 我的建议是将列表转换为数据表,然后使用表的默认View来构建您的数据View。首先,您必须建立数据表://isthetypeofdatainthelist.//IfyouhaveaList,forexample,thencallthisasfollows://ListListOfInt;//DataTableListTable=BuildDataTable(ListOfInt);publicstaticDataTableBuildDataTable(IListlst){//c

c# - "thread-safe type"到底是什么?我们什么时候需要使用 "lock"语句呢?

我阅读了所有关于线程安全类型和“锁定”语句的文档,但我仍然没有100%理解它。具体什么时候需要使用“lock”语句?它与(非)线程安全类型有何关系?谢谢。 最佳答案 想象一个类的实例,里面有一个全局变量。想象一下,两个线程同时对该对象调用一个方法,并且该方法更新内部的全局变量。变量中的值很可能会被破坏。不同的语言和编译器/解释器会以不同的方式处理这个问题(或者根本不处理......)但关键是你会得到“不希望的”和“不可预测的”结果。现在假设该方法在尝试读取或写入变量之前获得变量的“锁”。第一个调用该方法的线程将获得变量的“锁”,第二

c# - 为什么我不能将 List<List<Foo>> 传递给 IEnumerable<IEnumerable<Foo>>

此代码产生两个编译时错误:privatevoidDoSomething(){List>myFoos=GetFoos();UseFoos(myFoos);}privatevoidUseFoos(IEnumerable>){}Thebestoverloadedmethodmatchfor'NameSpace.Class.UseFoos(System.Collections.Generic.IEnumerable>)'hassomeinvalidarguments和Argument1:cannotconvertfrom'System.Collections.Generic.List>'to'

c# - 如何在 C# 中的 List<Tuple<string,string>> 中搜索字符串

我有一个List>tr=newList>();tr.Add(newTuple("Test","Add");tr.Add(newTuple("Welcome","Update");foreach(varlstintr){if(lst.Contains("Test"))MessageBox.Show("ValueAvail");}我这样做失败了,.... 最佳答案 如果您想使用LINQ:if(tr.Any(t=>t.Item1=="Test"||t.Item2=="Test"))MessageBox.Show("ValueAvail")

c# - Class B 继承自 ClassA 时,如何将 List<Class> 转换为 List<Class>?

我将json字符串反序列化为List现在我想把它转换到List在我把它从BindModel方法。我需要转换,因为这些方法期望得到List.为什么我在转换时出错?毕竟,ClassB继承自ClassA.我该怎么办?附言这个问题是从thispost扩展而来的.在线newDataContractJsonSerializer(typeof(List));而不是List该类型将在运行时构建。publicoverrideobjectBindModel(...){varserializer=newDataContractJsonSerializer(typeof(List));MemoryStream

c# - 涉及 List<T> 和对象转换的棘手问题

我最近在一次求职面试中被问到这个问题,但不知道如何优雅地回答。从那以后,它一直在困扰着我,我不知道它是对我不知道的某些“现代”技术/技术缺乏了解,还是我只是愚蠢。任何建议都将非常受欢迎。问题想象一个简单的类层次结构:abstractclassPerson{publicstringName{get;set;}}classChild:Person{}classParent:Person{publicListChildren{get;set;}}classAncestor:Parent{}问题是如何遍历此类对象的层次结构并打印出所有遇到的人。所以对于下面的场景:AncestormyAnces

c# - MSDN : What is "Thread Safety"?

在许多MSDN文档中,这写在线程安全标题下;“此类型的任何公共(public)静态(在VisualBasic中为共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”例如;here有人可以用一种相当简单的方式解释一下吗?谢谢:) 最佳答案 埃里克·利珀特(EricLippert)表现出色blogpost对这个。基本上它本身有点毫无意义。当我看到那个样板时,就我个人而言,在这方面我不太相信MSDN。它并不总是意味着它所说的。例如,它对Encoding说了同样的话-尽管事实上我们都在各处使用来自多个线程的编码。除非我有任何理由不

c# - : List<T>. Add() 或 System.Array.Resize() 哪个更有效?

我正在尝试确定何时使用List.Add()更有效与使用Array.Resize()相比方法。Array.Resize的文档说它复制了整个数组,并将其放入一个新对象中。旧对象将不得不被丢弃。这个旧对象在哪里?在栈上还是堆上?我不知道List.Add()是如何工作的。有谁知道List.Add方法与静态Array.Resize方法相比如何?我对内存使用(和清理)以及300种值类型和20,000种值类型哪个更好。就其值(value)而言,我计划在.NET的一种嵌入式版本上运行此代码。可能是.NETGadgeteer 最佳答案 你应该使用Li

c# - 如何在不知道 T 是什么的情况下将 T 类型的项目添加到 List<T>?

我正在处理一个事件,该事件传递指向一个列表和一个T新项目的事件参数,我的工作是将新项目添加到列表中。如果不检查我知道T可能是的所有类型,我该如何做到这一点?当前的代码是这样的几十行:privatevoidDataGridCollectionViewSource_CommittingNewItem(objectsender,DataGridCommittingNewItemEventArgse){Typet=e.CollectionView.SourceCollection.GetType();if(t==typeof(List)){Listsource=e.CollectionView