Tag: generics

使用reflection从类列表中的属性中获取值

我试图从列表中的对象获取值,该列表是主对象的一部分。 我有主要对象,其中包含可以是集合的各种属性。 现在我试图弄清楚如何访问对象中包含的通用列表。 /// ///Code for the inner class /// public class TheClass { public TheClass(); string TheValue { get; set; } } //Note this class is used for serialization so it won’t compile as-is /// ///Code for the main class /// public class MainClass { public MainClass(); public List TheList { get; set; } […]

我可以创建一个采用值类型或引用类型但总是返回可空类型的generics方法

这是我的方法。 请注意,我返回通用参数R的等效可空类型: public static Nullable GetValue(this T a, Expression<Func> expression) where T : Attribute where R : struct { if (a == null) return null; PropertyInfo p = GetProperty(expression); if (p == null) return null; return (R)p.GetValue(a, null); } 我可以在调用中使用它来获取如下属性的值: //I don’t throw exceptions for invalid or missing calls //because I want to chain the […]

如何在List中存储代理

如何将委托(命名,匿名,lambda)存储在通用列表中? 基本上我正在尝试构建一个委托字典,从中我可以使用密钥访问存储的委托并执行它并按需返回值。 是否可以在C#4中完成? 有什么想法来完成它吗? 注意:异类列表更适合存储任何类型的委托。

在C#中查找多个列表中的常用项

我有两个通用列表: List TestList1 = new List(); List TestList2 = new List(); TestList1.Add(“1”); TestList1.Add(“2”); TestList1.Add(“3”); TestList2.Add(“3”); TestList2.Add(“4”); TestList2.Add(“5”); 在这些列表中查找常用项目的最快方法是什么?

C#create Object obj = new T()?

我有一个超类,我们可以调用class A和几个子类,例如class a1 : A , class a2 : A ,…和a6 : A 。 在我的class B ,我有一组方法可以创建一个子类并将其添加到B的List中。 我想缩短我目前的代码。 所以不要写作 Adda1() { aList.Add( new a1() ); } Adda2() { aList.Add( new a2() ); } … Adda6() { aList.Add( new a6() ); } 相反,我想写一些与此相似的东西 Add() { aList.Add( new T() ); // This gives an error saying there […]

使用Lambda表达式调用通用方法(以及仅在运行时已知的类型)

您可以使用Lambda表达式对象将lambda表示为表达式。 如果在运行时只知道用于generics方法签名的类型,如何创建表示generics方法调用的Lambda表达式对象 ? 例如: 我想创建一个Lambda表达式对象来调用: public static TSource Last( this IEnumerable source ) 但我只知道TSource在运行时是什么。

如何实现通用方法对不同的值类型进行数学计算

我有一个接受IEnumerable-decimals和性能各种数学函数的方法。 我想在IEnumerable-int-上使用相同的方法。 我该如何实现? 例如找一个简单的总和? void Calculate(IEnumerable ListOFNumbers) { int count= ListofNumbers.Count(); ?sum=?; }

generics与数组列表

我在这里工作的系统是在.net 2.0之前编写的,并没有使用generics。 它最终更新为2.0,但由于时间限制,没有任何代码被重构。 在许多地方,代码使用ArraysLists等将事物存储为对象。 从性能角度来看,将代码更改为使用generics有多重要? 我从性能的角度来看,拳击和拆箱等等,这是低效的,但实际上有多少性能增益会改变呢? 仿制药是否可以在前进的基础上使用,或者是否有足够的性能变化,以便为更新旧代码做出良心努力?

如何检测对象是否为通用集合,以及它包含哪些类型?

我有一个字符串序列化实用程序,它接受(几乎)任何类型的变量并将其转换为字符串。 因此,例如,根据我的惯例,整数值123将被序列化为“i:3:123”(i =整数; 3 =字符串的长度; 123 =值)。 该实用程序处理所有原始类型,以及一些非generics集合,如ArrayLists和Hashtables。 界面是这种forms public static string StringSerialize(object o) {} 在内部我检测对象是什么类型并相应地序列化它。 现在我想升级我的实用程序来处理generics集合。 有趣的是,我找不到一个合适的函数来检测对象是一个generics集合,它包含哪些类型 – 我需要哪些信息才能正确序列化。 到目前为止,我一直在使用表格的编码 if (o is int) {// do something} 但这似乎不适用于generics。 您有什么推荐的吗? 编辑:感谢Lucero ,我已经接近答案了,但我仍然坚持这个小小的语法难题: if (t.IsGenericType) { if (typeof(List) == t.GetGenericTypeDefinition()) { Type lt = t.GetGenericArguments()[0]; List x = (List)o; stringifyList(x); } } 此代码无法编译,因为“ lt ”不允许作为List对象的参数。 为什么不? […]

通用重载决议

我有以下情况: class Foo { } class Foo : Foo { } 然后是两种方法 void DoStuff(Foo foo) { DoStuffImpl(foo); } void DoStuffImpl(Foo foo) { Console.WriteLine(“A”); } void DoStuffImpl(Foo foo) { Console.WriteLine(“B”); } void Main() { DoStuff(new Foo()); // prints A } (注意,代码是在浏览器中编写的,但描述了我面临的情况) 如何让它调用generics方法,然后打印B? 这可以在没有反思的情况下完成吗? 关于如何用reflection完成,我有一些想法,但我正在寻找一个更清洁的解决方案,如果存在的话。 注意:我不能使DoStuffgenerics,因为它将与WCF一起使用,并且不允许打开generics类型。