【发布时间】:2019-12-17 10:03:44
【问题描述】:
所以我有一个看起来像这样的类:
public class Foo<TKey>
{
...
}
我有一个使用TKey 泛型的方法,如下所示:
public int Test(TKey val)
{
return val | 5;
}
现在我需要设置约束以确保TKey 是一个数值,以便使用按位运算符。无论如何,你不能设置约束来确保它是一个数值,因为short,int,double,... 没有实现像INumeric 这样的接口。
现在的问题是,这是否可能仅在约束条件下实现?
【问题讨论】:
-
只有很少的数字类型。更重要的是,列表是不变的。所以泛型无论如何都不是正确的工具。只需为您需要的最高 Int 和 float 类型提供 1 个函数。
-
@Christopher 听起来不错,会这样做。您可能想发布一个我可以接受的答案,以便其他人更快地找到“解决方案”。
-
按位运算符是为
int、uint、long和ulong类型定义的。对于其他整数类型(sbyte、byte、short、ushort或char),它们的值将转换为int -
这能回答你的问题吗? Generic constraint to match numeric types
标签: c# generics constraints generic-constraints