将值传递给泛型类型

我有这样定义的方法


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) { }



}


慕姐4208626
浏览 231回答 2
2回答

慕哥9229398

int不是 的子类型Enumeration,因此where T: Enumeration不满足约束。因此,你需要调用MyclassName.FromValue<X>(0),以X作为Enumeration或其亚型,如MyclassName.FromValue<MyEnumeration>(0)与MyEnumeration声明class&nbsp;MyEnumeration&nbsp;:&nbsp;Enumeration&nbsp;{&nbsp;...&nbsp;}请注意,这将返回一个 type 值,MyEnumeration因为您将返回类型声明为泛型参数:public&nbsp;static&nbsp;T&nbsp;FromValue<T>(int&nbsp;value)&nbsp;where&nbsp;T&nbsp;:&nbsp;Enumeration,&nbsp;new() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^要获得字符串表示,您必须调用ToString()或访问字符串类型的属性。Enumeration您链接到的类会覆盖ToString()并提供DisplayName属性。

UYOU

泛型一开始学习可能有点复杂。在使方法通用时,有两点需要牢记。通用参数:(&nbsp;T)约束条件,如果有的话:(&nbsp;where T:)您问题中的通用方法如下所示:public&nbsp;static&nbsp;T&nbsp;FromValue<T>(int&nbsp;value)&nbsp;where&nbsp;T&nbsp;:&nbsp;Enumeration,&nbsp;new()此泛型方法声明声明您有一个泛型参数T,并且该参数被限制为一种类型,Enumeration并且它必须具有公共无参数构造函数 (&nbsp;new())。约束在泛型中很有用,因为它允许您在使用泛型的同时对其设置一小组规则或限制。也许你限制了一个接口,所以你知道任何T传入的成员都会在接口中?可能性是无止境。你的问题是因为你试图使用一个int作为您的泛型参数,现在,我刚才解释是什么约束,你应该知道,这是行不通的,因为System.Int32&nbsp;不符合要求。
打开App,查看更多内容
随时随地看视频慕课网APP