10

CLR は、個別のSystem.Typeインスタンスを使用して、SZ 配列 (1 次元、ゼロベース、別名ベクトル) および非ゼロベースの配列 (それらが 1 次元であっても) を表します。のインスタンスを取り、System.Typeそれが SZ 配列を表しているかどうかを認識する関数が必要です。メソッドでランクを確認できたのGetArrayRank()ですが、ゼロベースかどうかの確認方法がわかりません。助けてくれませんか?

using System;

class Program
{
    static void Main()
    {
        var type1 = typeof (int[]);
        var type2 = Array.CreateInstance(typeof (int), new[] {1}, new[] {1}).GetType();

        Console.WriteLine(type1 == type2); // False

        Console.WriteLine(IsSingleDimensionalZeroBasedArray(type1));  // True
        Console.WriteLine(IsSingleDimensionalZeroBasedArray(type2)); //  This should be False
    }

    static bool IsSingleDimensionalZeroBasedArray(Type type)
    {
        // How do I fix this implementation?
        return type != null && type.IsArray && type.GetArrayRank() == 1;
    }
}
4

2 に答える 2

16
static bool IsSingleDimensionalZeroBasedArray(Type type)
{
    return type != null && type.IsArray && type == type.GetElementType().MakeArrayType();
}
于 2013-05-03T00:07:57.057 に答える