【问题标题】:How to include type-specific code in generic classes for C# 6.0? [duplicate]如何在 C# 6.0 的泛型类中包含特定于类型的代码? [复制]
【发布时间】:2020-09-15 17:20:14
【问题描述】:

我正在用 C# 6.0 (VS2015) 编写一个泛型类,它具有泛型类型的模块级值(字段、属性等)。但是,我需要为某些数据类型(特别是int)包含额外的方法/代码,但我无法弄清楚如何以编译器接受的方式将 int 的值/结果分配给泛型类型属性。

class FOO<T>
{
    public T yada;

    void BAR(int nom)
    {
        if(nom is T)
        {
            yada = (T)nom;
        }
    }
}

我不知道如何让它接受最后一行:yada = (T)nom;,它总是说它无法将nom 转换为T

我觉得一定有一个简单的方法可以做到这一点,而且我以前可能做过,但我现在肯定不记得了。我试图用谷歌广泛地搜索这个,但我一定是用了错误的词,因为它一直返回的只是关于如何对类本身进行类型约束的文章,这不是我想要做的。

【问题讨论】:

    标签: c# .net visual-studio-2015 type-conversion c#-6.0


    【解决方案1】:

    你可以简单地写:

    class FOO<T>
    {
      public T yada;
    
      public void BAR(int nom)
      {
        if ( nom is T )
        {
          yada = (T)(object)nom;
        }
      }
    }
    

    例子

    var foo = new FOO<int>();
    foo.BAR(10);
    Console.WriteLine(foo.yada);
    

    输出

    10
    

    【讨论】:

    • Convert.ChangeType(..) 可能是我想的,谢谢。但是,我完全困惑 (T)(object)nom 会起作用。我可以看到它确实如此,但它似乎很疯狂。
    • 是的,我的第一个也是快速的反应是使用 Convert,但是当我看到我们在这里将 int 转换为 int 之后,所以不需要这样做,只转换到 object 和 T 旁边。因为 int不能转换成任何东西,但是对象可以和类型不匹配最终会在运行时引发异常,但不会出现编译错误。
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2019-06-04
    • 2011-01-15
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多