问题描述
我正在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