我有这样定义的方法public static T FromValue<T>(int value) where T : Enumeration, new() { var matchingItem = parse<T, int>(value, "value", item => item.Value == value); return matchingItem; }这是来自这个例子的东西我正在做的是调用该方法并传递 int 并从枚举中获取匹配的字符串。所以我试着做string matchedString = MyclassName.FromValue<int>(0);但这不是正确的语法,因为我不知道什么以及如何传递给这个方法 FromValue。获得示例也很高兴,这样我就可以阅读它并在将来解决自己的问题。更新 我在示例中从枚举类创建了类 public class MyClassName: Enumeration{ public static readonly MyClassName Dog = new MyClassName(0, "KL"); public static readonly MyClassName CAT = new MyClassName(1, "CT"); private MyClassName(int value, string displayName) : base(value, displayName) { }}
2 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
int
不是 的子类型Enumeration
,因此where T: Enumeration
不满足约束。
因此,你需要调用MyclassName.FromValue<X>(0)
,以X
作为Enumeration
或其亚型,如
MyclassName.FromValue<MyEnumeration>(0)
与MyEnumeration
声明
class MyEnumeration : Enumeration { ... }
请注意,这将返回一个 type 值,MyEnumeration
因为您将返回类型声明为泛型参数:
public static T FromValue<T>(int value) where T : Enumeration, new() ^
要获得字符串表示,您必须调用ToString()
或访问字符串类型的属性。Enumeration
您链接到的类会覆盖ToString()
并提供DisplayName
属性。
UYOU
TA贡献1878条经验 获得超4个赞
泛型一开始学习可能有点复杂。在使方法通用时,有两点需要牢记。
通用参数:(
T
)约束条件,如果有的话:(
where T:
)
您问题中的通用方法如下所示:
public static T FromValue<T>(int value) where T : Enumeration, new()
此泛型方法声明声明您有一个泛型参数T
,并且该参数被限制为一种类型,Enumeration
并且它必须具有公共无参数构造函数 ( new()
)。约束在泛型中很有用,因为它允许您在使用泛型的同时对其设置一小组规则或限制。也许你限制了一个接口,所以你知道任何T
传入的成员都会在接口中?可能性是无止境。
你的问题是因为你试图使用一个int
作为您的泛型参数,现在,我刚才解释是什么约束,你应该知道,这是行不通的,因为System.Int32
不符合要求。
- 2 回答
- 0 关注
- 230 浏览
添加回答
举报
0/150
提交
取消