我有问题,在创建类型为List < MyClass01>的对象“oListType01”并将其分配给类型为“object”的另一个对象“oObjectType”之后,我无法访问任何更多函数“ElementAt(1)”。我尝试通过使用反射,但我总是在“调用”方法中得到异常(参数冲突)。有谁知道为什么? 米兰如何使用反射调用列表<T>的扩展方法“ElementAt”?
MyClass01 oMy1 = new MyClass01();
oMy1._ID = "1";
MyClass01 oMy2 = new MyClass01();
oMy2._ID = "3";
IList<MyClass01> oListType01 = new List<MyClass01>();
oListType01.Add(oMy1);
oListType01.Add(oMy2);
object oObjectType = new object();
oObjectType = oListType01;
从这里fowrads唯一对象oObjectType可用(向上发生在单独的函数调用中的实际情况)。在VS oObjectType中显示了我希望每次反射访问的两个元素。
MethodInfo mInfo = typeof(System.Linq.Enumerable).GetMethod("ElementAt").MakeGenericMethod(typeof(object));
object oSingleObject = mInfo.Invoke(oObjectType, new object[] { 1 });
为什么你首先将它分配给一个对象? 如果你必须出于某种原因,并且如果在编译时知道该列表总是包含MyClass01实例的类型,那么为什么不把它重新投入列表,如下所示: ((List )oObjectType).ElementAt(1); –
tclem
2009-12-22 19:19:45
plese看看“答案”,我解释说在invoke中可以只使用引用oObjectType(不是oListType01而不是MyClass01)。 – milan 2009-12-23 11:11:46