【发布时间】:2014-07-29 14:04:10
【问题描述】:
下面是我的方法ImplementingInterface,让我自己的所有类都实现了我的自定义接口IInstaller。
private static IEnumerable<Assembly> MyAssemblies
{
get { return AppDomain.CurrentDomain.GetAssemblies().Where(x=>x.GetName().Name.StartsWith("ProjectPrefix", StringComparison.OrdinalIgnoreCase)); }
}
public static IEnumerable<TInterface> ImplementingInterface<TInterface>() where TInterface : class
{
var interfaceType = typeof(TInterface);
if (!interfaceType.IsInterface)
throw new Exception(interfaceType.Name + " is not an interface.");
var types = new List<Type>();
foreach (var assembly in MyAssemblies)
{
types.AddRange(assembly.DefinedTypes.Where(x => x.ImplementedInterfaces.Any(inter => inter == interfaceType)));
}
var expectedTypes = types.ToList();
var interfaces = expectedTypes.Cast<TInterface>().ToList(); // Error occurs.
}
但是当它到达下面用error occurs 标记的行时,它会抛出以下错误:
`System.Core.dll 中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理
附加信息:无法将“System.RuntimeType”类型的对象转换为“ProjectPrefix.IInstaller”类型。`
expectedTypes 有 3 个类都实现了IInstaller,为什么会抛出这个错误?
【问题讨论】: