我有这样定义的方法
public static T FromValue<T>(int value) where T : Enumeration, new()
{
var matchingItem = parse<T, int>(value, "value", item => item.Value == value);
return matchingItem;
}
这是此example
中的内容我正在做的是调用该方法并传递int并从枚举中获取匹配的字符串。所以我尝试做
string matchedString = MyclassName.FromValue<int>(0);
但这是不正确的语法,因为我不知道什么以及如何传递给此方法FromValue。获取示例也将很高兴,这样我就可以阅读它并将来解决自己。
更新 我在
这样的示例中从Enumeration类创建了类 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) { }
}
答案 0 :(得分:1)
int
不是Enumeration
的子类型,因此不满足where T: Enumeration
约束。
因此,您需要调用MyclassName.FromValue<X>(0)
,其中X
是Enumeration
或其子类型,例如
MyclassName.FromValue<MyEnumeration>(0)
MyEnumeration
被声明为
class MyEnumeration : Enumeration { ... }
请注意,由于您已将返回类型声明为通用参数,因此这将返回MyEnumeration
类型的值:
public static T FromValue<T>(int value) where T : Enumeration, new()
^
要获取字符串表示形式,您将必须调用ToString()
或访问string类型的属性。您链接到的Enumeration
类将覆盖ToString()
并提供DisplayName
属性。
答案 1 :(得分:1)
起初,泛型可能有点复杂。使方法通用时,需要牢记两点。
T
)where T:
)您问题中的通用方法如下:
public static T FromValue<T>(int value) where T : Enumeration, new()
此通用方法声明指出您有一个通用参数T
,并且该参数被限制为Enumeration
类型,并且必须具有公共无参数构造函数({{1} }。约束在泛型中很有用,因为它使您可以使用泛型,同时具有少量规则或限制。也许您限制了某个接口,所以您知道任何传入的new()
都会在该接口中具有成员吗?可能性是无限的。
您的问题是因为您尝试使用T
作为通用参数,而现在我已经解释了什么约束,所以您应该知道这是行不通的,因为int
不符合要求。