【发布时间】:2016-06-30 12:17:06
【问题描述】:
我需要一个适用于任何实值或复值数组的函数。
但是,对于函数本身,在Complex[]-Array 上工作非常方便。因此,我想将任何不是Complex[] 类型的数组(例如double[] 或byte[] 或int[]...)类型转换为Complex[]。
我认为这对我自己来说可能是一个很好的练习来编写一个小的通用函数:
private static Complex[] convertArrayToComplex<T>(T[] inpArr)
{
if (typeof(T) != typeof(Complex[]))
{
Complex[] inpArrC = new Complex[inpArr.Length];
for (int k = 0; k < inpArr.Length; k++)
{
inpArrC[k] = new Complex((double)(object)inpArr[k], 0);
}
return inpArrC;
} else
{
return inpArr; // Compiler-Error is here
}
}
当然这不起作用:编译器错误告诉我,T[] 不能隐式转换为 Complex[]。我确实理解这一点,但我看不到以优雅的方式实现我的目标的方法。
约束:我知道inpArr 是一个数值数组。
【问题讨论】:
-
你可以试试这个。
return (Complex[]) inpArr; -
谢谢。但我需要返回
Complex[]。这会给我一个错误“Tcannot be cast toComplex[]” -
当您明确需要
double数组时,为什么还要使用T数组?为什么方法没有定义为convertArrayToComplete(double[] inpArr)? -
泛型方法应该对所有类型
T表现一致,因此您应该避免这种类型检查。在这种情况下,您的函数仅适用于double[]输入,因为(double)(object)inpArr[k]转换对于任何其他类型都将失败。 -
您真的在寻找
Convert.ToDouble(inpArr[k])吗?检查实际基础值类型并找出转换或提取双精度值的正确方法?
标签: c# arrays generics casting