任何人都可以告诉我是否有一种方法可以使用泛型来限制泛型类型参数T
:
Int16
Int32
Int64
UInt16
UInt32
UInt64
我知道的where
关键字,但无法找到一个接口只有这些类型,
就像是:
static bool IntegerFunction<T>(T value) where T : INumeric
Run Code Online (Sandbox Code Playgroud) 可能重复:
仅对整数的C#泛型约束
映入眼帘!
我正在尝试在C#中设置笛卡尔坐标系,但我不想将自己限制为我的坐标值的任何一种数值类型.有时它们可能是整数,有时它们可能是有理数,取决于上下文.
这对我来说是"通用类",但我对如何将类型限制为积分和浮点感到难过.我似乎无法找到涵盖任何实数概念的课程......
public class Point<T> where T : [SomeClassThatIncludesBothIntsandFloats?] {
T myX, myY;
public Point(T x, T y) {
myX = x;
myY = y;
}
}
Point<int> pInt = new Point<int>(5, -10);
Point<float> pFloat = new Point<float>(3.14159, -0.2357);
Run Code Online (Sandbox Code Playgroud)
如果我想要这种自由度,那么当我在课堂上进行计算,除去bool,字符串,对象等时,我是否选择了"typeof(T)"噩梦?或者更糟糕的是,我是否选择为我想要使用的每种类型的数字创建一个类,每个都有相同的内部数学公式?
任何帮助,将不胜感激.谢谢!
我正在使用C#,.NET Framework 4.7.1和Visual Studio 2017版本15.6.3开发一个类库.
我有这个代码:
public static T Add<T, K>(T x, K y)
{
dynamic dx = x, dy = y;
return dx + dy;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用此代码:
genotype[index] = (T)_random.Next(1, Add<T, int>(_maxGeneValue, 1));
Run Code Online (Sandbox Code Playgroud)
genotype
是一个T[]
.
我收到错误:
参数2:无法从'T'转换为'int'
但是,如果我更改代码:
public static K Add<T, K>(T x, K y)
{
dynamic dx = x, dy = y;
return dx + dy;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
CS0030无法将类型'int'转换为'T'
当我得到这个错误T
是一个byte
.
我该如何解决这个错误?或者也许我可以改变random.Next
以避免这样做Add
.
最小代码:
public class MyClass<T>
{
private …
Run Code Online (Sandbox Code Playgroud)