相关疑难解决方法(0)

是否存在将我的泛型方法限制为数字类型的约束?

任何人都可以告诉我是否有一种方法可以使用泛型来限制泛型类型参数T:

  • Int16
  • Int32
  • Int64
  • UInt16
  • UInt32
  • UInt64

我知道的where关键字,但无法找到一个接口只有这些类型,

就像是:

static bool IntegerFunction<T>(T value) where T : INumeric 
Run Code Online (Sandbox Code Playgroud)

c# generics constraints

350
推荐指数
11
解决办法
10万
查看次数

"实数"类型是否存在C#泛型约束?

可能重复:
仅对整数的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# generics constraints

21
推荐指数
3
解决办法
2万
查看次数

无法使用K添加T,因为它返回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)

c# generics

4
推荐指数
1
解决办法
113
查看次数

标签 统计

c# ×3

generics ×3

constraints ×2