为了账号安全,请及时绑定邮箱和手机立即绑定

将值传递给泛型类型

将值传递给泛型类型

C#
慕姐4208626 2021-11-21 18:01:29
我有这样定义的方法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属性。


查看完整回答
反对 回复 2021-11-21
?
UYOU

TA贡献1878条经验 获得超4个赞

泛型一开始学习可能有点复杂。在使方法通用时,有两点需要牢记。

  1. 通用参数:( T)

  2. 约束条件,如果有的话:( where T:)

您问题中的通用方法如下所示:

public static T FromValue<T>(int value) where T : Enumeration, new()

此泛型方法声明声明您有一个泛型参数T,并且该参数被限制为一种类型,Enumeration并且它必须具有公共无参数构造函数 ( new())。约束在泛型中很有用,因为它允许您在使用泛型的同时对其设置一小组规则或限制。也许你限制了一个接口,所以你知道任何T传入的成员都会在接口中?可能性是无止境。

你的问题是因为你试图使用一个int作为您的泛型参数,现在,我刚才解释是什么约束,你应该知道,这是行不通的,因为System.Int32 符合要求。


查看完整回答
反对 回复 2021-11-21
  • 2 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信