2013-05-03 4 views
8

सीएलआर एसजेड-एरे (सिंगल-आयामी, शून्य-आधारित, उर्फ ​​वैक्टर) और गैर-शून्य-आधारित सरणी (भले ही वे एकल-आयामी हैं) का प्रतिनिधित्व करने के लिए अलग System.Type उदाहरणों का उपयोग करते हैं। मुझे एक ऐसे फ़ंक्शन की आवश्यकता है जो System.Type का उदाहरण लेता है और यह पहचानता है कि यह एक SZ-array का प्रतिनिधित्व करता है या नहीं। मैं 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; 
    } 
} 

उत्तर

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; 
} 
का उपयोग कर
संबंधित मुद्दे