【发布时间】:2020-03-12 14:47:36
【问题描述】:
ExtendedCommandManager.cs
var assembly = AppDomain.CurrentDomain.GetAssemblies();
var types = assembly.SelectMany(s => s.GetTypes()).Where(p => typeof(ICommand).IsAssignableFrom(p));
foreach (var type in types)
{
source.Commands.Add((ICommand) Activator.CreateInstance(type));
}
return source;
type继承ICcommand但是为什么会报错?
错误
Unhandled exception. System.MissingMethodException: Cannot create an abstract class.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean wrapExceptions, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& hasNoDefaultCtor)
at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type)
at BASE.CommandControllers.ExtendedCommandManager.Load[T](T source) in D:\CLang\DicordProject\Discord\BASE\CommandControllers\ExtendedCommandManager.cs:line 16
【问题讨论】:
-
你读过错误吗?它给了你一个非常重要的提示!看起来您有一个继承自
ICommand的类,这是一个无法创建的抽象类。您可能只需要测试您尝试创建的类是否是抽象的type.GetTypeInfo().IsAbstract; -
您尝试创建实例的类型中至少有一种是抽象的。抽象类型只能被继承,不能被实例化。您可以尝试打印您尝试实例化的每种类型,并查看导致异常的类型
-
没有人读过异常信息 :( "Cannot create an abstract class" 表示您无法创建 abstract 类的实例跨度>
标签: c#