用C#通用方法做数学运算(已知和未知)

本文关键字:未知 方法 运算 | 更新日期: 2023-09-27 17:57:33

Bonjorno,各位。你能解释一下如何在通用方法中执行操作吗。我想要一个不同的无符号整数的随机数组。IDE不允许我将Double(和其他)与泛型结构相乘。打字无论如何都不管用。也许我最好停止"设计自行车",从泛型方法中为每个整数类型调用几个方法中的一个?

public static T[] getRandArray<T>(int amount) where T: struct
{
    FieldInfo maxValueField =
        typeof(T).GetField(
            "MaxValue",
            BindingFlags.Public | BindingFlags.Static
        );
    T maxValueOfT = (T)maxValueField.GetValue(null);
    Random randNum = new Random();
    T[] array = new T[amount];
    for (int i = 0; i < amount; i++)
    {
        array[i] = (T)(randNum.NextDouble()) * maxValueOfT;
    }
    return array;
}

用C#通用方法做数学运算(已知和未知)

它将不适用于泛型。

  • 如果您的方法只需要一个uint[],那么用它替换泛型类型
  • 如果您不仅需要uint[],还需要任何其他类型的数组,例如int[],那么您必须为您的方法创建一个重载

不幸的是,对于泛型类型,没有任何约束可以让你对它们进行一些计算。

Btw。我建议您在静态类中创建一个Random实例作为静态字段,然后在方法中使用它。

只有泛型方法才应该是泛型的。那里定义的唯一约束是T:struct。假设我定义如下:

public struct Point 
{ 
    public int X { get; set; }
    public int Y { get; set; }
}

我可以为getRandArray提供一个Point,但你如何使用它?

相反,选择一种符合你需求的类型。如果您提供的接口是合适的,您通常仍然可以利用隐式转换来实现您的目标