将c#Array.CreateInstance创建的非基于0的数组转换为集合T.

时间:2018-02-05 13:37:04

标签: c# arrays collections casting zero

我试图将vb6代码转换为c#代码。 我的vb6源代码包含各种类型的数组,经过Vs2005工具转换后,这些数组已成为基于0的数组,但我需要重新转换为非基于0的数组。例如,我尝试使用Array.CreateInstance显式转换为T []以供通用:

public void ResizeArrayBaseN<T>(ref T[] original, int firstLower, int firstCount)
{
    try
    {
        int[] myBoundsArray = new int[1] {firstLower };
        int[] myLengthsArray = new int[1] {firstCount - firstLower + 1 };
        original = (T[])Array.CreateInstance(typeof(T), myLengthsArray, myBoundsArray);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

但是我从T [*]到T []错误中捕获了强制转换。 有谁可以帮助我吗 ? 提前致谢

1 个答案:

答案 0 :(得分:5)

T[]是一个 vector 数组 - 一个从零开始的一维数组。您不能使用T[]来表示具有非零基数的数组,因为:它不是矢量。这就是*T[*]的含义。我怀疑它只能 被引用为Array - 这使得它非常不方便使用。