通用函数:将T []转换为Complex []

时间:2016-06-30 12:17:07

标签: c# arrays generics casting

我需要一个适用于任何实值或复值数组的函数。

但是,对于函数本身,使用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是一个数字数组。

1 个答案:

答案 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;
}