jst*_*rdo 3 c# interface constraints
我有这个界面:
namespace Common.Extensions
{
public interface IExtension
{
string FriendlyName { get; }
string Description { get; }
}
}
Run Code Online (Sandbox Code Playgroud)
在其他类方法中,我有这个定义:
public void LoadExtensions<T>(T tipo) where T : Common.Extensions.IExtension
{
}
Run Code Online (Sandbox Code Playgroud)
在该方法的主体内部,我有这个:
T extension = Activator.CreateInstance(t) as T;
Run Code Online (Sandbox Code Playgroud)
其中"t"是从DLL动态加载的类型.该类型实现了IExtension接口.
使用该代码,我收到此编译时错误:
The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint
Run Code Online (Sandbox Code Playgroud)
根据文档,我想要做的是有效的.这里缺少什么?
海梅
的as操作者只能与参考类型或空类型(用于参考).如果接口是由struct实现的,as则无法使用它.
你可以约束T成为一个类
public void LoadExtensions(T tipo) where T : class, Common.Extensions.IExtension
Run Code Online (Sandbox Code Playgroud)
或者你可以使用常规演员:
T extension = (T)Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)
注意
您还可以new()向方法添加约束以强制T使用默认构造函数来避免运行时问题,并且根本不使用强制转换:
public static void LoadExtensions<T>(T tipo) where T : IExtension, new()
{
T extension = new T();
}
Run Code Online (Sandbox Code Playgroud)