草庐IT

Generics

全部标签

c# - 如何正确克隆 List<MyObject>?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIcloneagenericlistinC#?Lista1=newList();varnew1=a1;现在,如果我更改a1,那么new1也会更改。所以我的问题是如何正确地克隆a1?

c# - 有没有办法将参数传递给 is 运算符?

我正在尝试找到以下替代方法,以便我可以利用is运算符。publicboolIsOfType(Typetype){returnthis._item.GetType()==type;}类似于下面的内容,无法编译。publicboolIsOfType(Typetype){returnthis._itemistype;} 最佳答案 我认为您正在寻找Type.IsAssignableFrom:publicboolIsOfType(Typetype){return_item!=null&&type.IsAssignableFrom(_item.

c# - 将泛型与 XmlSerializer 结合使用

在C#中使用XML序列化时,我使用这样的代码:publicMyObjectLoadData(){XmlSerializerxmlSerializer=newXmlSerializer(typeof(MyObject));using(TextReaderreader=newStreamReader(settingsFileName)){return(MyObject)xmlSerializer.Deserialize(reader);}}(以及类似的反序列化代码)。它需要转换并且不是很好。有没有办法直接在.NETFramework中使用带有序列化的泛型?也就是说要写这样的东西:publi

c# - 实现嵌套的通用接口(interface)

我有以下类/接口(interface)://ModelpublicclassA:IA{}//ModelLogicpublicclassB:IB{}//ModelInterfacepublicinterfaceIA{}//ModelLogicInterfacepublicinterfaceIBwhereT:IA{}我尝试使用以下代码创建一个新实例:IBfoo=newB();我收到以下错误:Cannotimplicitlyconverttype'B'to'IB'.Anexplicitconversionexists(areyoumissingacast?)有人可以解释为什么这是不可能的吗?

c# - .NET:如何检查泛型类中的类型?

如何在类中获取泛型类的类型?一个例子:我构建了一个实现ICollection的通用类型化集合。在我里面有像这样的方法publicvoidAdd(Titem){...}publicvoidAdd(IEnumerableenumItems){...}如何在方法中请求给定类型T?我的问题的原因是:如果object用作T集合使用Add(objectitem)而不是Add(IEnumerableenumItems)即使参数是IEnumerable。因此,在第一种情况下,它将整个可枚举集合添加为一个对象,而不是可枚举集合的多个对象。所以我需要类似的东西if(Tisobject){//Checkfo

c# - C# 中具有类型参数的泛型类型

我不认为这可以在C#中完成,但发布它只是为了确保。这是我的问题。我想在C#中做这样的事情:varx=10;varl=newList();或varx=10;vart=typeof(x);varl=newList();但这当然行不通。尽管这应该不是问题,因为类型t在编译时已解析。我知道这可以通过反射来解决,但由于类型在编译时是已知的,因此使用反射就太过分了。 最佳答案 publicstaticListCreateCompatibleList(Tt){returnnewList();}varx=10;varl=CreateCompatib

c# - 为什么将 List<T> 转换为 IList<T> 会导致性能下降?

我在做一些性能指标时遇到了一些对我来说很奇怪的事情。我为以下两个函数计时:privatestaticvoidDoOne(){ListA=newList();for(inti=0;iA=newList();for(inti=0;iL=A;ints=0;for(intj=0;j即使在Release模式下编译,计时结果始终显示DoTwo比DoOne花费大约100倍的时间:DoOnetook0.06171706seconds.DoTwotook8.841709seconds.鉴于List直接实现IList这一事实,我对结果感到非常惊讶。谁能澄清这种行为?血淋淋的细节回答问题,这里是完整的代码和

c# - 如何从逗号分隔的字符串创建 List<T>?

给定变量stringids=Request.QueryString["ids"];//"1,2,3,4,5";有没有办法把它转换成一个列表而不用做类似的事情ListmyList=newList();foreach(stringidinids.Split(',')){if(int.TryParse(id)){myList.Add(Convert.ToInt32(id));}} 最佳答案 要从头开始创建列表,请使用LINQ:ids.Split(',').Select(i=>int.Parse(i)).ToList();如果您已经有了列表

C# 泛型通配符或如何保存对未知泛型继承的引用

好的,情况是这样的。我有一个FlexCollection类,其目的是保存FlexItem的一些专业列表,因此:publicclassFlexCollectionwhereT:FlexItem,new(){publicvoidAdd(Titem){...}...}FlexItem不是泛型类本身。我想要实现的是能够保持FlexItem的字段是对包含该对象的集合的引用。不幸的是,在C#中,不可能保留对模板类的“任何”特化的引用(如在Java中)。起初我尝试使用非通用接口(interface)IFlexCollection但它实际上迫使我对每个方法执行两次,即:publicclassFlexC

c# - 继承的通用类型统一

对于这样的场景:publicinterfaceIAnimal{}publicinterfaceIGiraffe:IAnimal{}publicinterfaceIQuestionableCollection:IEnumerable{voidSomeAction();}publicinterfaceIQuestionableCollection:IQuestionableCollection,IEnumerablewhereT:IAnimal{}publicclassQuestionableCollection:IQuestionableCollectionwhereT:IAnimal{