2013-06-18 9 views
6

क्या यह जांचना संभव है कि एक चर को स्ट्रिंग के रूप में परिभाषित किया गया है यदि उसके अंदर का मान शून्य है?यदि यह स्ट्रिंग है तो शून्य मान चर का परीक्षण कैसे करें?

अगर मैं लिखना:

string b = null; 
bool c = b is string; 

फिर झूठा होगा, क्योंकि सामग्री है, जो बातिल और नहीं एक स्ट्रिंग है पर लग रहा है है।

अगर मैं लिखना:

string b = null; 
bool c = (b.GetType() == typeof(string)); 

तो यह दुर्घटनाओं क्योंकि रों रिक्त है और आप एक शून्य मान पर GetType() फोन नहीं कर सकते हैं।

तो, मैं यह जानने के लिए बी कैसे जांच सकता हूं कि यह किस प्रकार है? शायद कुछ प्रकार का प्रतिबिंब? या क्या कोई आसान तरीका है?

संपादित करें 1: प्रश्न का स्पष्टीकरण!

मैं अपने प्रश्न में थोड़ा अस्पष्ट था और यह मेरी गलती थी। उदाहरण में ऐसा लगता है कि मैं चर की सामग्री का परीक्षण करने की कोशिश कर रहा हूं। लेकिन मैं सामग्री को देखे बिना वैरिएबल का परीक्षण करना चाहता हूं। दिए गए कोड उदाहरणों में मैं देख सकता हूं कि बी एक स्ट्रिंग है, लेकिन अगर मुझे नहीं पता कि बी एक स्ट्रिंग है या नहीं, तो यह देखने के लिए वेरिएबल एस का परीक्षण करना चाहते हैं कि यह स्ट्रिंग है या नहीं।

तो, मैं कैसे जान सकता हूं कि चर किस प्रकार परिभाषित किया गया है? इस उदाहरण के रूप में, लेकिन एक्स एक अज्ञात चर है जिसे स्ट्रिंग के रूप में परिभाषित किया जा सकता है और यह भी शून्य हो सकता है (क्योंकि यह शून्य हो सकता है यह उदाहरण काम नहीं करेगा)।

bool c = (x.GetType() == typeof(string)); 

संपादित 2: कार्य समाधान!

दिए गए सभी उत्तरों के लिए धन्यवाद, मैं इसे हल करने में सक्षम था। इस तरह कामकाजी समाधान बन गया। मैंने पहले एक वैरिएबल के परिभाषित प्रकार का परीक्षण करने के लिए एक सहायता फ़ंक्शन बनाया जो कि मान शून्य होने पर भी काम करता है और यह किसी भी चीज़ को इंगित नहीं करता है।

public static Type GetParameterType<T>(T destination) 
{ 
    return typeof(T); 
} 

तो मैं सिर्फ इस फ़ंक्शन को कॉल करें और मेरे "संदिग्ध स्ट्रिंग" का परीक्षण करने और यह पता लगाने अगर यह सच में एक स्ट्रिंग नहीं है या कर सकते हैं।

// We define s as string just for this examples sake but in my "definition" we wouldn't be sure about whether s is a string or not. 
string s = null; 

// Now we want to test to see if s is a string 
Type t = GetParameterType(s); 
b = t == typeof(string); // Returns TRUE because s has the type of a string 
b = t is string; // Returns FALSE because the content isn't a string 

यह वही है जो मैं जानना चाहता था !!! अपने दिमाग फैलाएंगे के लिए आप सभी को धन्यवाद ...

+7

संभावित डुप्लिकेट [.NET: आपको एक नल ऑब्जेक्ट का प्रकार कैसे मिलता है?] (Http://stackoverflow.com/questions/254461/net-how-do-you-get-the-type-of -ए-नल-ऑब्जेक्ट), [सी # नल ऑब्जेक्ट का प्रकार प्राप्त करें] (http://stackoverflow.com/q/930147), [अंतर्निहित प्रकार का एक शून्य ऑब्जेक्ट प्राप्त करना] (http://stackoverflow.com/q/3650060), [ऑब्जेक्ट संदर्भ के लिए शून्य संदर्भ ऑब्जेक्ट प्राप्त करें किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है] (http://stackoverflow.com/q/3663802) –

+1

मुझे संदेह है कि क्या आप कर सकते हैं कि coz null प्रतीकात्मक नहीं है एक विशिष्ट प्रकार – V4Vendetta

+0

आप शायद ऐसी समस्या को हल करने का प्रयास कर रहे हैं जो एक अलग तरीके से बेहतर हल हो जाएगा। क्या आप जो कुछ करने की कोशिश कर रहे हैं उस पर विस्तार कर सकते हैं? – Sean

उत्तर

11

है आप null क्योंकि nullहै कोई प्रकार के प्रकार की जाँच नहीं कर सकते। यह किसी भी चीज का संदर्भ नहीं देता है, इसलिए ऐसा कुछ भी नहीं है जो सी # वास्तविक प्रकार को जानने के लिए देख सके।

(अन्य सभी लोगों सवाल का जवाब देने जा "मैं बता सकते हैं कैसे एक स्ट्रिंग संदर्भ शून्य या खाली है - लेकिन मुझे लगता है सवाल यह है कि" लगता है मैं कैसे बता सकता है अगर अंतर्निहित एक अशक्त संदर्भ के प्रकारstring है ...)

वहाँ हालांकि यह बेला के लिए एक तरीका हो सकता है - आप एक सामान्य विधि का उपयोग करने में सक्षम हो सकता यहाँ उल्लेख किया:

.NET : How do you get the Type of a null object?

(यही कारण है कि लिंक किसी और के द्वारा पोस्ट किया गया था - नहीं मुझे - के रूप में अपने मूल पोस्ट पर टिप्पणी!)

+2

+1 इस सूक्ष्म प्रश्न का एकमात्र समझदार उत्तर अब तक – djf

+0

हां, आप केवल एक ही हैं जो मेरा प्रश्न प्राप्त करते हैं :-) लेकिन क्या यह जांचने का कोई तरीका नहीं है कि चर को कैसे परिभाषित किया गया था, भले ही इसका शून्य मूल्य हो? – Ohlin

+0

@ ओहलिन - क्या आपने अपने प्रश्न के तहत पहली टिप्पणी में किसी भी डुप्लिकेट लिंक को देखा था? – Tim

1

यहाँ यह

String.IsNullOrEmpty(s); 
+0

यह प्रश्न "क्या एक स्ट्रिंग है" का उत्तर कैसे देता है? " जब 's' शून्य है? –

+0

यदि एस स्ट्रिंग नहीं है तो यह अपवाद फेंक देगा। – Sean

+0

कोड को देखो। पीओ ने 'स्ट्रिंग बी = नल;' घोषित किया है – Paritosh

3

तो तुम अगर वहाँ एक वस्तु प्रकार जिसका मूल्य

शून्य पर सरल शब्द जवाब नहीं है में सेट किया गया है की जाँच करने के लिए एक सीधा तरीका है जानना चाहते हैं।

एक शून्य संदर्भ किसी भी संग्रहण स्थान को इंगित नहीं करता है, इसलिए कोई मेटाडेटा नहीं है जिससे यह दृढ़ संकल्प कर सके।

अगर आप पहले से ही पता है कि यह प्रकार स्ट्रिंग की है, तो आप शून्य मान

String.IsNullOrWhiteSpace(stringObject); 

और

String.IsNullOrEmpty(stringObject) 
सबसे अच्छा है कि आप एक मूल्य निर्धारित करने के लिए कर सकता है

की जाँच के लिए दो कार्य निम्न का उपयोग कर सकते हैं अज्ञात प्रकार का उपयोग

Convert.ChangeType 

उदाहरण के लिए .NET : How do you get the Type of a null object?

public void GetObjectValue<T>(out T destination) 
{ 
    object paramVal = "Blah.Blah."; 
    destination = default(T); 
    destination = Convert.ChangeType(paramVal, typeof(T).GetType()); 
} 

में दिए गए टी के प्रकार, अनुमान लगाया जा सकता है ताकि आप विधि स्पष्ट रूप से करने के लिए एक प्रकार पैरामीटर देने की आवश्यकता नहीं होनी चाहिए। के रूप में यह संस्करण स्वतंत्र है

0
  1. IsNullOrWhiteSpace(variableName)

  2. string.IsNullOrEmpty()

  3. var.Trim().Length < 1

तीसरे एक, एक मैं व्यक्तिगत रूप से उपयोग करें।

+1

प्रिय डाउनवॉटर!कृपया टिप्पणी छोड़ें – Zia

+3

मैं डाउनवॉटर नहीं था, लेकिन कारण शायद इसलिए है क्योंकि आपने सवाल का जवाब नहीं दिया: ** मैं यह जानने के लिए बी कैसे देख सकता हूं कि यह किस प्रकार है? ** यहां बहुत सारे उत्तर केंद्रित हैं पद के शीर्षक पर (जो भ्रामक है)। – Tim

+0

@tim ठीक है, मॉडरेटर तदनुसार प्रश्न संपादित करें। तो मैं अपना जवाब हटा दूंगा – Zia

0

इसे जांचने के लिए String.IsNullOrEmpty विधि का उपयोग करें।

string b = null; 
bool c = String.IsNullOrEmpty(b); 

अधिक जानकारी के लिए यह MSDN लिंक देखें।

1

यदि आप यह बताना चाहते हैं कि वास्तविक मान string है, तो आप null के साथ ऐसा नहीं कर सकते, क्योंकि null में कोई प्रकार नहीं है।

तो ऐसा लगता है आप चर (एक के रूप में घोषित किया गया था) के वास्तविक प्रकार निर्धारित करने के लिए करना चाहते हैं:

वैरिएबल प्रकार string की है, तो आप इसे संकलन समय पर पता (यदि आप इसे के रूप में घोषित string, सब के बाद)।
यदि चर सामान्य है (सामान्य प्रकार या सामान्य विधि में), तो आप typeof(T) के माध्यम से इसका परीक्षण कर सकते हैं, मानते हैं कि T आपका प्रकार पैरामीटर है।
यदि आपको वैरिएबल object के रूप में मिला है (उदाहरण के लिए विधि के तर्क के रूप में), तो उसके मूल प्रकार को निर्धारित करने का कोई तरीका नहीं है यदि इसका मान null है।

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