簡體   English   中英

如何識別代表SZ-Array的System.Type實例?

[英]How do I recognize a System.Type instance representing SZ-Array?

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;
    }
}
static bool IsSingleDimensionalZeroBasedArray(Type type)
{
    return type != null && type.IsArray && type == type.GetElementType().MakeArrayType();
}

比上面更快,沒有觸摸類型系統,只使用類型的名稱

public static bool IsSzArray( this Type type ) {
    if ( type != null && type.IsArray ) {
        string name = type.Name;
        int len = name.Length;

        return len > 2 && name[ len - 2 ] == '[';
    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM