在foreach循环声明中使用动态变量

时间:2014-06-23 10:12:08

标签: c# dynamic types foreach

我正在使用Reflection来加载程序集并调用标记为Internal的类的方法,但是我在运行时让代码正确运行时遇到了一些问题。
不幸的是,我所处理的大多数类型也属于同一类。

我有类似以下的内容:

Type MyType = Type.GetType("My.MyClass, My.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxx", true);

dynamic list = MyType.GetMethod("getList").Invoke(concreteType, null);

foreach (dynamic item in list)
{
    MyObject data = item.GetData();
}

其中:

  • concreteType是使用Activator.CreateInstance
  • 创建的预先存在的对象
  • MyType是My.Assembly DLL中的内部类型。
  • 方法getList将返回,例如列表MyList<MyItem>的类型,但这是上述程序集的内部。
  • item变量类型也是同一DLL的内部变量,为此我们假设其类型为MyItem
  • 我可以使用Reflection将上述任何类型(MyType MyList MyItem)拉入Type变量。
  • MyObject是我可以在当前项目中访问的类型

当我运行上面的代码时,我在foreach循环上得到一个例外:

InvalidOperationException: Dynamic operations can only be performed in homogenous AppDomain.

我尝试使用objectvar代替dynamic list但是我收到编译错误,因为foreach循环不想迭代类型Object

我不认为我可以使用Type变量静态输入其中一些变量。

搜索异常错误也会产生大量无关信息,因此我不太确定如何缩小结果范围。

有没有办法让这个循环完全运行?

我还应该提到,这被编码为SharePoint 2013的自定义解决方案,因此我也不确定运行时环境是否会因此而有所不同。

0 个答案:

没有答案