如何在C#6.0的通用类中包含特定于类型的代码?

问题描述

我正在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

我觉得必须有一种简单的方法来做到这一点,甚至我以前可能已经做过,但是我现在肯定不记得了。我已经尝试过在Google上进行广泛的搜索,但是我肯定使用了错误的词,因为它一直在返回的只是有关如何对类本身进行类型约束的文章,这不是我想要的。

解决方法

您可以简单地写:

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