2

我正在尝试访问由 .net 反射命名空间的方法调用产生的内部项目。但我无法转换为任何通用列表类型和数组。有我的自定义课程。

这是我的代码;

foreach (Type t in theInterfaceInheritedClasses)
{                   
    object instance = a.CreateInstance(t.FullName);
    MethodInfo[] mi = t.GetMethods();
    object res;
    foreach (var method in mi)
    {
       if (method.GetParameters().Count() == 1)
       {
           if (method.Name != "Equals" && method.Name != "GetHashCode" && method.Name != "ToString")
           {
                res= method.Invoke(instance, new object[] {
                           wdoc
                     });
                IEnumerable resultItems = (res as IEnumerable);
           }
        }
    }
}

res 有我想要访问的项目。我怎样才能做到这一点?

4

2 回答 2

0

最后我可以解决问题。我认为这是关于 OOP 原则的规则。让我定义一下我的结构:

我设计了一个 Windows 应用程序,可以导入具有要由我的 Windows 应用程序调用的方法的 DLL 文件。我的应用程序和将要导入的类库使用相同的 POCO 类。但起初这些类的命名空间是不同的。然后我认识到一个错误说明类型不一致。然后我做了一个新的类库,把它们(我的常用类)放到这个新的类库中。并从所有需要的项目中引用了这个 dll。现在我可以将对象转换为数组类型。

对不起,如果我让你感到困惑:)

于 2013-10-30T15:24:19.463 回答
-2

您想在哪里访问它们?您似乎在 foreach 循环中创建了对象“res”,因此如果您想在 foreach 循环之外访问它,您需要将其设置为:

object res;
foreach(...)
{

}

如果您的问题是为什么即使它们应该存在也无法从 res 中获取值:您将函数中的数据转储到“object”(根类型)类型的对象中,因此只能访问来自对象的方法。如果要使用特定对象中定义的方法,请尝试将对象转换为正确的类型:

foreach(...)
{
   YourType res;
   ...
   res = (YourType)(method.Invoke(instance, new object[] { wdoc }));
}
于 2013-10-30T12:59:00.617 回答