2010-02-01 14 views
7

PropertyInfo उदाहरण दिया गया है, जिसमें Type संपत्ति है, यह कैसे निर्धारित करता है कि यह एक संरचना है या नहीं? मैंने पाया कि IsPrimitive, IsInterface इत्यादि जैसी गुण हैं, लेकिन मुझे यकीन नहीं है कि संरचना के लिए कैसे पूछना है?यह निर्धारित करने के लिए कि टाइप एक संरचना है या नहीं?

संपादित करें: प्रश्न स्पष्ट करने के लिए। मान लीजिए मैं एक विधि है:

public Boolean Check(PropertyInfo pi) 
{ 
    return pi.Type.IsStruct; 
} 

क्या मैं IsStruct के बजाय लिख सकता हूँ?

उत्तर

10

टाइप.इस्वाल्यू टाइप को चाल चलनी चाहिए।

(here से pinched)

+0

धन्यवाद। मुझे लगता है मुझे भी जांच करनी होगी! Isrimrimitive है, लेकिन यह चाल करना चाहिए। –

+2

@ डीजन: प्राइमेटिव्स (जैसे बूलियन) भी structs हैं। –

+0

आप सही हैं, आपको इसकी आवश्यकता होगी! Isprrimitive। एक विस्तार विधि के बारे में क्या? : डी – OregonGhost

1

एक extention विधि में एंटनी कोच के जवाब पर टिप्पणी डालने:

public static class ReflectionExtensions { 
     public static bool IsCustomValueType(this Type type) {    
       return type.IsValueType && !type.IsPrimitive && type.Namespace != null && !type.Namespace.StartsWith("System."); 
     } 
    } 

काम करना चाहिए

+0

विचार करें कि क्या आप 'IsEnum' को शामिल या बहिष्कृत करना चाहते हैं - यदि आप केवल कस्टम structs की तलाश में हैं। –

1

Structs और enums (IsEnum) सुपरसेट के अंतर्गत आते हैं मूल्य प्रकार कहा जाता है (IsValueType)। आदिम प्रकार (IsPrimitive) संरचना का एक उप-समूह हैं। जिसका अर्थ है कि सभी आदिम प्रकार structs हैं लेकिन इसके विपरीत नहीं; उदाहरण के लिए, int एक प्राचीन प्रकार के साथ ही संरचना है, लेकिन decimal केवल एक संरचना है, न कि एक प्राचीन प्रकार।

तो आप एक ही लापता संपत्ति देखते हैं जो एक संरचना है। लिखने में आसान:

public bool IsStruct(this Type type) 
{ 
    return type.IsValueType && !type.IsEnum; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे