用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;
}
它将不适用于泛型。
- 如果您的方法只需要一个
uint[]
,那么用它替换泛型类型 - 如果您不仅需要
uint[]
,还需要任何其他类型的数组,例如int[]
,那么您必须为您的方法创建一个重载
不幸的是,对于泛型类型,没有任何约束可以让你对它们进行一些计算。
Btw。我建议您在静态类中创建一个Random
实例作为静态字段,然后在方法中使用它。
只有泛型方法才应该是泛型的。那里定义的唯一约束是T:struct。假设我定义如下:
public struct Point
{
public int X { get; set; }
public int Y { get; set; }
}
我可以为getRandArray提供一个Point
,但你如何使用它?
相反,选择一种符合你需求的类型。如果您提供的接口是合适的,您通常仍然可以利用隐式转换来实现您的目标