Tag: generics

generics类型的C#声明

是否有可能得到一个reflection获得的类型的“c#名称”,如: System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 我想得到: List 没有拆分字符串有可能吗? 例如,使用Reflection。 谢谢!

C#语言:如何获取绑定但开放的Generic类的类型?

假设我有这样一个通用类 public class XClass { public void MethodA(){} } 我怎么能得到这种类型的 XClass 没有硬编码,不限制MakeGenericType方法,如下所示。 ——使用MakeGenericType ——详细阐述 我可以得到未绑定和开放类“XClass ”的类型及其open方法: var type = typeof(XClass); Console.WriteLine(String.Format(“Type ZClass: \t generic? {0} \t open? {1}” , type.IsGenericType, type.IsGenericTypeDefinition)); var method = type.GetMethod(“MethodA”); Console.WriteLine(String.Format(“Method MethodA: \t generic? {0} \t open? {1}” , method.IsGenericMethod, method.IsGenericMethodDefinition)); 另外,我可以得到全封闭类的类型 XClass 及其密切方法: var type = typeof(XClass); var method […]

通用Func 中的可选参数

我在程序集中有以下方法: public string dostuff(string foo, object bar = null) { /* … */ } 我将它用作回调函数,因此对它的引用会传递给另一个程序集: Func dostuff 现在在原始forms中,我可以调用它而不指定第二个参数,默认为null 。 但是当我在第二个程序集中使用它作为回调时,我必须指定第二个参数。 什么语法允许我忽略第二个参数?

List .IndexOf()如何执行自定义对象的比较?

我写了一类帐户对象并保存这些帐户对象的静态List 。 我的程序循环遍历列表中的每个帐户,对帐户执行一些操作,然后在到达列表末尾时在顶部重置。 我的问题是,在我的程序完成后,我需要能够将帐户重新插入列表中,并添加了一些更新的信息。 我是否可以按照下面的说明执行此操作,使用IndexOf()函数检查静态列表中的对象,还是因为我向其添加数据而失败? 我不明白它比较哪些字段以查看两个对象是否相同。 注意:列表中不允许重复,因此不存在更新错误项目的风险 public class Account { public string name; public string password; public string newInfo; } public static class Resources { private static List AccountList = new List(); private static int currentAccountIndex = 0; public static Account GetNextAccount() { if (currentAccountIndex > AccountList.Count) currentAccountIndex = 0; return AccountList[currentAccountIndex++]; } public […]

用StructureMap注册通用工厂的方法

我试图在我的structuremap注册表中的generics工厂类上使用方法。 通常,我会在使用工厂方法注册类型时使用以下内容: For().Use(x => new FooFactory().GetFoo()); 注册generics类型时如下: For(typeof(ISomeGeneric)).Use(typeof(SomeGeneric)); 如何将两者结合起来并从通用工厂方法中检索generics类型? 我认为应该是这样的: For(typeof(IFoo)).Use(typeof(x => new FooFactory().Create(someParameter)); 这只是给了一个 “Cannot convert lambda expression to type object because it is not a delegate type” 错误。 我尝试了各种组合,但我很难过。 有任何想法吗? 谢谢。

IList和IList 之间有什么区别

.net中List定义表明它实现了各种接口。 public class List : IList, ICollection, IEnumerable, IList, ICollection, IEnumerable 什么改变接口有没有T带来IList即如果我的一个类实现IList而不是IList ,那么我可以将它用作我的自定义集合类吗?

通用方法中的implict类型转换

为什么我在下面的代码中得到一个编译器错误说明:即使T必须从我在where子句中定义的NodeBase派生,即使SpecialNode实际上是从NodeBase派生的, Cannot implicty convert type SpecialNode to T public static T GetNode() where T : NodeBase { if (typeof(T) == typeof(SpecialNode)) { return ThisStaticClass.MySpecialNode; // <– compiler error } if (typeof(T) == typeof(OtherSpecialNode)) { return ThisStaticClass.MyOtherSpecialNode; // <– compiler error } … return default(T); }

无法创建通用方法:找不到“T”

我试图实现一个返回通用列表(List)的方法,但我不断收到此错误消息: 找不到类型或命名空间名称’T’(您是否缺少using指令或程序集引用?) 这是我的方法代码: public static List doQuery(string query) { SQLiteCommand com = new SQLiteCommand(query, SQLiteManager.connection); SQLiteDataReader reader = com.ExecuteReader(CommandBehavior.Default); while (reader.Read()) { //other code } } 为什么在这种情况下T不被识别为通用类型?

从Func 到Func 的转换工作但到Func 失败

我有以下代码: static Func s_objToString = (x) => x.ToString(); static Func s_stringToString = s_objToString; //compiles static Func s_intToString = s_objToString; //error 第二行编译,但第三行无法编译错误: 无法将类型’ System.Func ‘隐式转换为’ System.Func ‘ 这是为什么? 我理解,虽然字符串是从对象派生的,但是List并不是从List派生的,但是这里object是string工作而object是int失败,为什么呢? 好吧,让我说我理解为什么; 现在的问题是有一种解决方法(其他然后定义MyInt类到框int因为Func到Func工作)?

为什么generics类型的名称在.NET堆栈跟踪中被破坏?

我从C#方法抛出exception,它将通用列表作为参数。 private static void DoWork(List a) { } 当它抛出exception时,堆栈跟踪显示“1”而不是列表的类名。 为什么是这样? 这就是堆栈跟踪的含义。 … at DoWork(List`1 a). …