草庐IT

Generics

全部标签

c# - 当 new-able 使用 new T(),否则使用 default(T)

我正在研究C#泛型函数。错误时,如果泛型类型可以是new-able,返回newT(),否则返回default(T)。代码如下:privateTFunc(){try{//trytodosomething...}catch(Exceptionexception){if(Tisnew-able)//我知道对于那些使用newT()的人来说,它需要whereT:new()。这个问题是,如何在运行时判断这个? 最佳答案 您只需要检查该类型是否具有无参数构造函数。您可以通过以空类型作为参数调用Type.GetConstructor方法来实现。va

c# - 根据子类指定基类抽象方法的返回类型

我有以下结构:abstractclassBase{publicabstractListGet();//Whatshouldbethegenerictype?}classSubOne:Base{publicoverrideListGet(){}}classSubTwo:Base{publicoverrideListGet(){}}我想创建一个抽象方法,返回具体子类的任何类。因此,正如您从示例中看到的那样,SubOne中的方法应该返回List而SubTwo中的方法应该返回List.我在基类中声明的签名中指定什么类型?[更新]感谢您发布的答案。解决方案是使抽象类通用,如下所示:abstrac

c# - 关于 C# 泛型的最重要的事情......经验教训

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。关于泛型,您知道的最重要的事情是什么:隐藏的特性、常见错误、最佳和最有用的实践、提示...我开始使用泛型实现我的大部分库/API,并希望收集在实践中发现的最常见的模式、技巧等。让我将问题形式化:关于泛型,您学到的最重要的事情是什么?请尽量提供例子——这样会更容易理解,而不是令人费解和过于枯燥的描述谢谢这个问题有点类似于Jon'squestion,不过,在

c# - 可以在此通用代码中避免使用 Delegate.DynamicInvoke 吗?

这个问题部分是关于委托(delegate)的,部分是关于泛型的。给定简化代码:internalsealedclassTypeDispatchProcessor{privatereadonlyDictionary_actionByType=newDictionary();publicvoidRegisterProcedure(Actionaction){_actionByType[typeof(T)]=action;}publicvoidProcessItem(objectitem){Delegateaction;if(_actionByType.TryGetValue(item.Get

c# - 将非通用集合转换为通用集合的最佳方法

将非通用集合转换为通用集合的最佳方法是什么?有没有办法对其进行LINQ?我有以下代码。publicclassNonGenericCollection:CollectionBase{publicvoidAdd(TestClassa){List.Add(a);}}publicclassConvertTest{publicstaticListConvertToGenericClass(NonGenericCollectioncollection){//Askforhelphere.}}谢谢! 最佳答案 因为您可以保证它们都是TestCla

c# - 泛型的泛型列表

我试图在一个通用列表中存储一个通用对象列表,但我在声明它时遇到了困难。我的对象看起来像:publicclassField{publicstringName{get;set;}publicstringDescription{get;set;}publicTValue{get;set;}/*...*/}我想创建一个列表。我的问题是列表中的每个对象都可以有一个单独的类型,因此填充的列表可能包含如下内容:{Field,Field,Field,Field}那么我该如何声明呢?List>(我希望尽可能保持类型安全,所以我不想使用ArrayList)。 最佳答案

c# - 从 IEnumerable<DateTime> 获取最早的日期

我有一个IEnumerable里面有很多日期。我如何从该集合中获得最早的日期?谢谢!戴夫 最佳答案 您可以使用LINQ使用Enumerable.Min立即执行此操作.DateTimeminDate=dateCollection.Min();自DateTime工具IComparable,Enumerable.Min将使用DateTime.CompareTo找到最小值DateTime在集合中。 关于c#-从IEnumerable获取最早的日期,我们在StackOverflow上找到一个类似的

c# - 什么是 Type.GUID,它与 Type.Equals() 有什么关系?

我在尝试将System.RuntimeType的实例与泛型类型TOut进行比较时遇到了一些有趣的行为:TyperuntimeT=methodInfo.ReturnType;//getRuntimeTypeusingreflectionTypegenericT=typeof(TOut);//ThisconditionfailsbecauseruntimeTdoesn't//seemtoincludeanassemblyqualifiednameif(runtimeT.Equals(genericT)){...}这是我的证据:免责声明:我不知道GUID在CLR/类型系统的上下文中到底是什么

C# 泛型 - 通过使包装类泛型获得什么?

考虑这个泛型类:publicclassRequestwhereTOperation:IOperation{privateTOperation_operation{get;set;}publicstringMethod{get{return_operation.Method;}}publicRequest(TOperationoperation){_operation=operation;}}与下面的非通用版本相比,上面的通用版本有什么真正的好处?publicclassRequest{privateIOperation_operation{get;set;}publicstringMet

c# - "where T : somevalue"是什么意思?

whereT:somevalue是什么意思?我刚刚看到一些代码说whereT:Attribute。我认为这与泛型有关,但我不确定这意味着什么或它在做什么。有人知道吗? 最佳答案 这是一个constraintonatypeparameter,表示类型T赋予泛型类或方法的必须继承自类Attribute例如:publicclassFoo:whereT:Attribute{publicstringGetTypeId(Tattr){returnattr.TypeId.ToString();}//..}Foobar;//OK,Descripti