泛型函数:将T[]转换为Complex[]
本文关键字:转换 Complex 函数 泛型 | 更新日期: 2023-09-27 17:53:18
我需要一个对任何实值或复数值数组都有效的函数。
然而,对于函数本身,在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
是一个数字数组。
你可以知道类型是相等的,但是你仍然需要说服编译器。此外,我将使用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;
}