2013-05-03 23 views
8

CLR使用不同的System.Type實例來表示SZ陣列(一維,零基,aka向量)和非零基陣列(即使它們是一維)。我需要一個函數,它需要一個System.Type的實例並識別它是否代表SZ數組。我能夠使用GetArrayRank()方法檢查排名,但不知道如何檢查它是否爲零。你能幫我嗎?如何識別代表SZ陣列的System.Type實例?

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

回答

15
static bool IsSingleDimensionalZeroBasedArray(Type type) 
{ 
    return type != null && type.IsArray && type == type.GetElementType().MakeArrayType(); 
} 
0
比上面的快,不接觸式系統

,僅使用類型的名稱

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