泛型函数:将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是一个数字数组。

泛型函数:将T[]转换为Complex[]

你可以知道类型是相等的,但是你仍然需要说服编译器。此外,我将使用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;
}