gpt4 book ai didi

c# - 无法为接口(interface)添加约束

转载 作者:行者123 更新时间:2023-11-30 13:43:52 25 4
gpt4 key购买 nike

我有这个界面:

namespace Common.Extensions
{
public interface IExtension
{
string FriendlyName { get; }
string Description { get; }
}
}

在其他类方法中,我有这样的定义:

public void LoadExtensions<T>(T tipo) where T : Common.Extensions.IExtension
{

}

在那个方法的内部,我有这个:

T extension = Activator.CreateInstance(t) as T;

其中“t”是从 DLL 动态加载的类型。该类型实现 IExtension 接口(interface)。

使用该代码,我收到此编译时错误:

The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint

根据文档,我尝试做的是有效的。这里缺少什么?

杰米

最佳答案

as 运算符只能用于引用类型或可空类型 ( reference )。如果接口(interface)由结构 as 实现,将无法使用它。

您可以将 T 限制为一个类

public void LoadExtensions(T tipo) where T : class, Common.Extensions.IExtension

或者您可以使用常规转换:

T extension = (T)Activator.CreateInstance(t);

注意

您还可以向方法添加 new() 约束以强制 T 具有默认构造函数以避免运行时问题,并且根本不使用强制转换:

public static void LoadExtensions<T>(T tipo) where T : IExtension, new()
{
T extension = new T();
}

关于c# - 无法为接口(interface)添加约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49112122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com