我在尝试使用Activator.CreateInstance时,在我的一个解决方案中出现了一个奇怪的错误,它将从正常通用T创建的类型的.ctor参数更改为IEnumerable。我已经为控制台应用程序提取了足够的代码来进行单独测试,但它似乎工作正常。
以下是在控制台应用中使用的解压缩代码 -
class Program
{
static void Main(string[] args)
{
Notify(new List<MyBase> { new MyBase(), new MyBase() });
}
private static void Notify<T>(IEnumerable<T> changes) where T : IMy
{
var dtoType = changes.First().GetType();
var type = typeof(MyNotification<>).MakeGenericType(dtoType);
var notification = (IMyNotification)Activator.CreateInstance(type, new object[] { changes });
}
}
public interface IMy { }
public class MyBase : IMy { }
public interface IMyNotification { }
public interface IMyNotification<T> : IMyNotification where T : IMy
{
}
public class MyNotification<T> : IMyNotification<T> where T : IMy
{
public MyNotification(IEnumerable<T> mys) { }
}
基本上这与我原始解决方案中运行的代码相同。
错误是MissingMethodException,因此无法找到匹配的.ctor。
对于可能导致这种情况的原因缺乏想法,在调试器中查看两种解决方案中的类型信息,我看不出任何差异。所有项目都使用解决方案进行清理和构建。
修改的
希望有人能指出我可能解决这个问题的其他方向。
由于
修改的
我已经尝试将.ctor更改为'object'类型,并且使用该更改Activator可以创建类型。
答案 0 :(得分:0)
如果您需要,请使用new MyNotification<T>(changes)
。