2012-11-21 13 views
7

मैं विजुअल स्टूडियो में तत्काल विंडो में हूं। एक चर p है। मैं वैरिएबलp के प्रकार को कैसे घटा सकता हूं?एक चर के प्रकार का निर्धारण कैसे करें? (ऑब्जेक्ट का प्रकार नहीं)

मैंने p.GetType() की कोशिश की लेकिन यह ऑब्जेक्टp का प्रकार देता है। मेरे मामले में, यह एक बहुत ही विशिष्ट प्रकार है (उदाहरण के लिए कभी-कभी ChessPlayer, कभी-कभी TennisPlayer)। मैं चर के प्रकार, यानी जानना चाहता हूँ। वह प्रकार जो यह निर्धारित करता है कि परिवर्तनीय p पर कौन सी विधियां उपलब्ध हैं।


संपादित करें: मुझे लगता है कि यह करना एक उचित बात है। मैं परिवर्तनीय p का निरीक्षण करने की कोशिश कर रहा हूं लेकिन मुझे नहीं पता कि यह है! आम तौर पर विजुअल स्टूडियो में मैं बस चर पर माउस को घुमाता हूं और यह मुझे अपना प्रकार बताता है, या मैं . टाइप करता हूं और स्वत: पूर्ण अपनी विधियों को सूचीबद्ध करता है। इस बात का हालांकि कोई भी तत्काल विंडो में काम करता है, सभी मेरे पास है इस चर p है मैं नहीं जानता कि यह क्या है या मैं इसके साथ क्या कर सकता है :(

+0

क्या आपने 'p.GetType()। GetMethods()' की कोशिश की है? 'P.GetType()। GetInterfaces()'? – J0HN

+2

हालांकि मैं इस बारे में उत्सुक हूं कि ऐसा करने का कोई तरीका है या नहीं, मुझे आश्चर्य नहीं होगा। यदि आप 'p' पर हैंडल के साथ डीबगर में हैं, तो आप कोड में' p' की घोषणा_ को देख सकते हैं और इस प्रकार देख सकते हैं कि इसका "चर" प्रकार क्या है। – Rawling

+3

बस स्पष्ट करने के लिए, 'बोर्डगेमप्लेयर पी = नया शतरंज प्लेयर();', आप क्या चाहते हैं यह जानने का एक तरीका है कि 'पी' को' बोर्डगेमप्लेयर 'के रूप में घोषित किया गया था? –

उत्तर

3

आश्चर्य यह था इतना मुश्किल है, अंत में मैंने इस विधि को लिखा, जो सही जवाब देने लगता है।

public static class Extensions 
{ 
    public static Type GetVariableType<T>(this T instance) 
    { 
     return typeof(T); 
    } 
} 

उदाहरण उपयोग:

void Main() 
{ 
    IList x = new List<int>{}; 
    x.GetVariableType().Dump(); 
} 

प्रिंटों System.Collections.IList

0
System.Object.GetType() 

यह आपको चर के प्रकार के वापस आ जाएगी क्योंकि हर वर्ग ली गई है जहाँ से पदानुक्रम के शीर्ष में इस वर्ग के।

आप भी typeof समारोह की जांच कर सकते दी उदाहरण का सही प्रकार प्राप्त करने के लिए।

+1

ओपी का कहना है कि उसने 'गेट टाइप' की कोशिश की है। वह संकलन प्रकार प्रकार 'पी' चाहता है, रन-टाइम प्रकार नहीं। – Rawling

+0

अच्छी तरह से, इसके लिए टाइपऑफ संभावित समाधान होगा। –

5

C# इस :)

के लिए कई तरीके प्रदान करता है

विशिष्ट प्रकार की सटीक प्रतिलिपि के लिए आप इस

if (p.GetType() == typeof(YourDesiredType)) 

करने के लिए आप को पता है पी yourdesiredtype का एक उदाहरण

if (p is YourDesiredType) 

है कि क्या तो चाहते हैं की जरूरत है या आप इस

YourDesiredType ydp = p as YourDesiredType; 
कोशिश कर सकते हैं

इस मामले में (जैसा कि मुझे यकीन नहीं है कि यह आपके परिदृश्य में संभव है) जब ओपी संकलन प्रकार जानना चाहता है तो मैं wo uld केवल क्योंकि प्रकार सुरक्षित सूची रखकर इस

के लिए एक सामान्य सूची का उपयोग करने की सलाह देते हैं, हर कोई आसानी से अपने प्रकार के लिए ट्रैक रख सकते हैं

+1

यह सब रनटाइम प्रकार की जांच कर रहा है। ओपी संकलन-समय के प्रकार में रूचि रखता है। – Rawling

+0

उसने बस इसे मंजूरी दे दी। मुझे लगता है कि नीचे वोट की कोई आवश्यकता नहीं थी :(किसी ने किया – Freak

0

मुझे लगता है कि आप की आवश्यकता हो सकती इस

if (p is ChessPlayer) 
{ 
    ChessPlayer cp = (ChessPlayer)p; 

    //Use ChessPlayer methods 
} 
1

तत्काल विंडो का उपयोग कर, यदि आप केवल चर के प्रकार देखना चाहते हैं के लिए एक विकल्प के रूप में, आप बस एक चर जोड़ सकते हैं घड़ी विंडो में प्रकार को देखें और जांचें।

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