草庐IT

Generics

全部标签

c# - 是否可以定义实现多个接口(interface)的任何类型的列表?

考虑以下类层次结构:publicinterfaceX{voidFoo();}publicinterfaceY{voidBar();}publicclassA:X,Y{publicvoidFoo(){}publicvoidBar(){}}publicclassB:X,Y{publicvoidFoo(){}publicvoidBar(){}}有什么方法可以定义一个列表(或任何通用类型),它可以同时包含A的和B的,同时允许我将所述列表的内容视为X和Y?IE。一些东西可以让我按照这样的方式写一些东西:varlist=???list.Add(newA());list.Add(newB());li

c# - 具有泛型类型的 nameof

我正在尝试获取通用接口(interface)上方法的名称。我希望它能工作,因为类型部分是一个有效的类型://Thisdoesnotcompilenameof(IGenericInterface.Method)//Thiswouldcompiletypeof(IGenericInterface)我认为这应该是有效的c#-6.0或者我是否遗漏了什么或者是否有更好的方法来做到这一点。我不想使用字符串作为方法名称,因为如果方法被重命名代码会中断而不会出现任何构建时错误。 最佳答案 这是预料之中的。根据documentation,您的表达式是

c# - 泛型与数组列表

我在这里工作的系统是在.net2.0之前编写的,没有泛型的好处。最终更新为2.0,但由于时间紧迫,没有重构任何代码。代码在许多地方使用ArraysLists等将事物存储为对象。从性能的角度来看,将代码更改为使用泛型有多重要?我知道从性能角度来看,装箱和拆箱等,效率低下,但改变它真的能带来多少性能提升?泛型是可以在前进的基础上使用的东西,还是它有足够的性能变化,应该做出良心的努力来更新旧代码? 最佳答案 正如您所说,从技术上讲,泛型的性能更好。但是,除非性能非常重要并且您已经在其他方面进行了优化,否则您可能会通过将时间花在其他方面来获

c# - 将结构转换为通用接口(interface)时是否有装箱/拆箱?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Structs,InterfacesandBoxing来自MSDN:http://msdn.microsoft.com/en-us/library/yz2be5wk.aspxBoxingistheprocessofconvertingavaluetypetothetypeobjectortoanyinterfacetypeimplementedbythisvaluetype.但是通用接口(interface)呢?例如,int派生自IComparable和IComparable.假设我有以下代码:voidfoo(

c# - 在泛型方法中将值转换为 T

我有一个破旧的属性映射界面:interfaceIPropertyMap{boolExists(stringkey);intGetInt(stringkey);stringGetString(stringkey);//etc..}我想像这样创建一个扩展方法:publicstaticTGetOrDefault(thisIPropertyMapmap,stringkey,TdefaultValue){if(!map.Exists(key))returndefaultValue;else{if(typeof(T)==typeof(int))return(T)map.GetInt(key);//

C# : Passing a Generic Object

我想要一个通用的打印函数...PrintGeneric(T)...在下面的例子中,我缺少什么?一如既往地感谢您的帮助/见解...publicinterfaceITest{}publicclassMyClass1:ITest{publicstringmyvar="hello1";}publicclassMyClass2:ITest{publicstringmyvar="hello2";}classDoSomethingClass{staticvoidMain(){MyClass1test1=newMyClass1();MyClass2test2=newMyClass2();Console

c# - 如何在给定 Dictionary<TKey,TValue> 类型的情况下获取 TKey 和 TValue 的类型

我想在给定Dictionary的情况下获取TKey和TValue的类型类型。例如。如果类型是Dictionary我想知道如何获得keyType=typeof(Int32)和valueType=typeof(字符串) 最佳答案 我认为这可能是您正在寻找的:Dictionarydictionary=newDictionary();Type[]arguments=dictionary.GetType().GetGenericArguments();TypekeyType=arguments[0];TypevalueType=argumen

c# - C# .NET 中的 TSource 是什么?

问题什么是TSource?这是一个examplefromMSDN:publicstaticIEnumerableUnion(thisIEnumerablefirst,IEnumerablesecond,IEqualityComparercomparer)它是一种类型吗?找不到关于它的任何MSDN文档。我认为它不可能是一种类型,因为我无法在.NETReflector中单击它.它是.NET关键字吗?在C#keywords中没有找到它列表。.NET编译器是否以特殊方式解释它?我已经知道的我知道T是一个泛型类型参数,在泛型方法中用作占位符。来自WhatAreGenerics的示例来自MSDN:

c# - 为从 List<string> 继承的集合实现 GetEnumerator()

我正在尝试实现FilePathCollection。它的项目将是简单的文件名(没有路径-例如“image.jpg”)。通过foreach循环使用集合后,它应该返回通过与baseDirectory连接创建的完整路径。我怎样才能做到这一点?publicclassFilePathCollection:List{stringbaseDirectory;publicFilePathCollection(stringbaseDirectory){this.baseDirectory=baseDirectory;}newpublicSystem.Collections.IEnumeratorGetE

c# - 在 C# 中,如果我的对象支持该接口(interface),我如何检查 T 是否属于 IInterface 类型并强制转换为该类型?

在C#中,我有一个使用generics传入T的函数,我想运行一个检查以查看T是否是一个object实现了一个interface,如果是的话调用那个interface上的methods之一。我不想让T约束只属于那种类型。可以这样做吗?例如:publicclassMyModel:IModelwhereT:MyObjectBase{publicIQueryableGetRecords(){varentities=Repository.Query();if(typeof(IFilterable).IsAssignableFrom(typeof(T))){//Filtermeisamethodt