如何识别代表SZ-Array的System.Type实例?

Oks*_*mel 10 .net c# arrays reflection clr

CLR使用不同的System.Type实例来表示SZ阵列(单维,从零,也称为向量)和非零基础阵列(即使它们是单维的).我需要一个函数,它接受一个实例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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Zak*_*ley 16

static bool IsSingleDimensionalZeroBasedArray(Type type)
{
    return type != null && type.IsArray && type == type.GetElementType().MakeArrayType();
}
Run Code Online (Sandbox Code Playgroud)