gpt4 book ai didi

java - 如何在C#中模拟Java泛型通配符

转载 作者:行者123 更新时间:2023-11-30 19:23:23 26 4
gpt4 key购买 nike

下面的 Java 代码比较两个数组的平均值,一个是 Integers,另一个是 Double。

class Generic_Class<T extends Number>
{
T[] nums; // array of Number or subclass

Generic_Class(T[] o)
{
nums = o;
}

// Return type double in all cases.
double average()
{
double sum = 0.0;

for(int i=0; i < nums.length; i++)
sum += nums[i].doubleValue();

return sum / nums.length;
}


// boolean sameAvg(Generic_Class<T> ob)
// Using Generic_Class<T> i get the error:
// incompatible types: Generic_Class<Double> cannot be converted to Generic_Class<Integer>

// Using wilcards I get no error
boolean sameAvg(Generic_Class<?> ob)
{
if(average() == ob.average())
return true;
return false;
}
}

主要方法是这样的:

public static void main(String args[])
{
Integer inums[] = { 1, 2, 3, 4, 5 };
Double dnums[] = { 1.0, 2.0, 3.0, 4.0, 5.0 };

Generic_Class<Integer> iob = new Generic_Class<Integer>(inums);
Generic_Class<Double> dob = new Generic_Class<Double>(dnums);

System.out.println("iob average is " + iob.average());
System.out.println("dob average is " + dob.average());

if (iob.sameAvg(dob))
System.out.println("Averages of iob and dob are the same.");
else
System.out.println("Averages of iob and dob differ.");
}

结果是:

iob average is 3.0
dob average is 3.0
Averages of iob and dob are the same.

我曾尝试在 C# 中执行相同的操作,但是由于没有通配符,我无法完成相同的任务。

我怎样才能用 C# 做同样的事情?

谢谢。

最佳答案

正如其他回答者所说,在 C# 中没有与 Number 等效的东西。您可以获得的最好的是 struct, IConvertible。但是,还有另一种处理通用通配符的方法。

只需使用另一个通用参数:

public class Generic_Class<T> where T : struct, IConvertible
{
T[] nums;
public Generic_Class(T[] o)
{
nums = o;
}

public double Average()
{
double sum = 0.0;
for(int i=0; i < nums.Length; i++)
sum += nums[i].ToDouble(null);
return sum / nums.Length;
}

// this is the important bit
public bool SameAvg<U>(Generic_Class<U> ob) where U : struct, IConvertible
{
if(Average() == ob.Average())
return true;
return false;
}
}

关于java - 如何在C#中模拟Java泛型通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49516738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com