我需要一个适用于任何实值或复值数组的函数。
但是,对于函数本身,使用Complex[]
- 数组非常方便。因此,我想将任何类型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
是一个数字数组。
答案 0 :(得分:5)
你可以知道类型相同,但你仍然必须说服编译器。另外,我会使用is
而不是类型检查来使代码更清晰:
private static Complex[] convertArrayToComplex<T>(T[] inpArr)
{
if (inpArr is Complex[])
{
return (Complex[])(object)inpArr;
}
Complex[] inpArrC = new Complex[inpArr.Length];
for (int k = 0; k < inpArr.Length; k++)
{
inpArrC[k] = new Complex(Convert.ToDouble(inpArr[k]), 0);
}
return inpArrC;
}