所以我有一个看起来像这样的类:
public class Foo<TKey>
{
...
}
我有一个使用TKey
泛型的方法,如下所示:
public int Test(TKey val)
{
return val | 5;
}
现在我需要设置约束以确保它TKey
是一个数值,以便使用按位运算符。无论如何,您不能设置约束以确保它是一个数值,因为short,int,double,...
不要实现类似INumeric
.
现在的问题是,这是否可能只有约束?
所以我有一个看起来像这样的类:
public class Foo<TKey>
{
...
}
我有一个使用TKey
泛型的方法,如下所示:
public int Test(TKey val)
{
return val | 5;
}
现在我需要设置约束以确保它TKey
是一个数值,以便使用按位运算符。无论如何,您不能设置约束以确保它是一个数值,因为short,int,double,...
不要实现类似INumeric
.
现在的问题是,这是否可能只有约束?
泛型是关于允许地球上任何程序员可能为 T 投入的任何 Random 类。然而,数字类型实际上是一个非常静态的列表。我永远不会期望程序员制作自己的数字类型。包含二元运算符在内的重载运算符?也许很少。
所以这不是一个普遍的案例。如果您只为 2 种(可能是 3 种)类型编写代码,您应该涵盖几乎所有存在的泛型:
*更正:虽然 Decimal 在 64 位时具有最高的精度位数和最大的大小,但 Double 具有更大的范围。通过数量级,它本身具有数量级。
试试这个代码:
public static int Test<TKey>(TKey val) where TKey : struct, IComparable
{
int numberValue = Convert.ToInt32(val);
return numberValue | 5;
}
这应该工作!