Tag: generics

如何使用reflection获得generics类型的正确文本定义?

我正在研究代码生成,并遇到了generics问题。 这是导致我出现问题的“简化”版本。 Dictionary dictionary = new Dictionary(); string text = dictionary.GetType().FullName; 使用上面的代码片段, text的值如下: System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] (添加了换行符以提高可读性。) 有没有办法在不解析上面的字符串的情况下以不同的格式获取类型名称( type )? 我希望text结果如下: System.Collections.Generic.Dictionary

使用运行时类型执行的通用方法

我有以下代码: public class ClassExample { void DoSomthing(string name, T value) { SendToDatabase(name, value); } public class ParameterType { public readonly string Name; public readonly Type DisplayType; public readonly string Value; public ParameterType(string name, Type type, string value) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(“name”); if (type == null) throw new ArgumentNullException(“type”); this.Name = name; this.DisplayType = […]

在C#中将DataTable转换为通用列表

免责声明:我知道它在SO的很多地方被问过。 我的查询有点不同。 编码语言:C#3.5 我有一个名为cardsTable的DataTable从DB中提取数据,我有一个类卡,它只有一些属性(没有构造函数) public class Cards { public Int64 CardID { get; set; } public string CardName { get; set; } public Int64 ProjectID { get; set; } public Double CardWidth { get; set; } public Double CardHeight { get; set; } public string Orientation { get; set; } public string BackgroundImage { get; […]

为什么这个generics方法需要T有一个公共的无参数构造函数?

public void Getrecords(ref IList iList,T dataItem) { iList = Populate.GetList() // GetListis defined as GetList } dataItem可以是我的订单对象或用户对象,它将在运行时决定。上面不起作用,因为它给我这个错误类型’T’必须有一个公共无参数构造函数,以便将它用作参数’T’in通用类型

限制generics类型参数以具有特定构造函数

我想知道为什么generics类型参数的新约束只能在没有参数的情况下应用,也就是说,可以将类型约束为具有无参数构造函数,但是不能将类约束为具有(例如)构造函数的构造函数。接收一个int作为参数。 我知道这方面的方法,使用reflection或工厂模式,工作正常,好吧。 但我真的很想知道为什么,因为我一直在思考它,我真的想不出无参数构造函数和带有参数的区别,这些参数可以certificate对新约束的这种限制。 我错过了什么? 非常感谢 论点1:构造函数是方法 @Eric:让我和你在一起一会儿: 构造函数是方法 然后我想如果我这样做,没有人会反对: public interface IReallyWonderful { new(int a); string WonderMethod(int a); } 但是一旦我有了,那我就去: public class MyClass where T : IReallyWonderful { public string MyMethod(int a, int b) { T myT = new T(a); return myT.WonderMethod(b); } } 这首先是我想要做的。 所以,抱歉,但不, 构造函数不是方法 ,或者至少不完全。 关于实现这个function的困难,我真的不知道,即使我这样做了,我对于明智地支出股东资金的决定也没什么可说的。 这样的话,我会马上把它标记为答案。 从学术(我)的角度来看,也就是说,没有任何关于实施成本的问题,问题确实是(我在最近几个小时内完成了这个问题): 构造函数应该被视为类的实现的一部分,还是作为语义契约的一部分(以同样的方式将接口视为语义契约)。 如果我们将构造函数视为实现的一部分,那么,约束generics类型参数的构造函数不是一件非常通用的事情,因为这会将您的generics类型绑定到具体的实现,并且几乎可以说为什么完全使用generics? 构造函数的示例作为实现的一部分(在将指定任何以下构造函数作为ITransformer定义的语义协定的一部分时没有意义): public […]

如何从C#中的字符串创建generics类?

我有一个像这样的Generic类: public class Repository {…} 我需要用字符串来实例…示例: string _sample = “TypeRepository”; var _rep = new Repository(); 我怎样才能做到这一点? 这有可能吗? 谢谢!

是否无法动态使用generics?

我需要在运行时创建一个使用generics的类的实例,比如class ,而不知道它们将具有的类型T,我想做类似的事情: public Dictionary GenerateLists(List types) { Dictionary lists = new Dictionary(); foreach (Type type in types) { lists.Add(type, new List()); /* this new List() doesn’t work */ } return lists; } ……但我不能。 我认为不可能在通用括号内的C#中写入一个类型变量。 还有另一种方法吗?

通用类型的集合

如果我有一个generics类: public class MyClass { public T Value; } 我想实例化几个项目,如… new MyClass new MyClass …并将它们添加到集合中。 如何定义集合以便它可以包含generics类型列表? 然后我想在某个时刻迭代集合,并使用Value属性。 可能?

在generics中实现算术?

是否可以在C#generics中实现基本算法(至少是加法),就像使用C ++模板一样 ? 我已经尝试了一段时间来让它们起作用,但是C#不允许你多次声明相同的generics类型,就像你可以使用模板一样。 广泛的谷歌搜索没有提供答案。 编辑:谢谢,但我正在寻找的是一种在编译时进行算术运算的方法,在generics类型中嵌入像教会数字这样的东西。 这就是为什么我把我做过的文章联系起来的原因。 generics类型的算术,而不是generics类型实例的算术。

你能用“where”来要求c#中的属性吗?

我想创建一个只接受可序列化类的generics类,可以用where约束来完成吗? 我正在寻找的概念是这样的: public class MyClass where T : //[is serializable/has the serializable attribute]