2010-03-09 12 views
5

मैं इसे एक स्ट्रिंगNullable <bool> क्रमबद्ध करने के लिए कैसे?

public static string SerializeNullableBoolean(bool? b) 
{ 
    if (b == null) 
    { 
     return "null or -1 or .."; // What to return here? 
    } 
    else 
    { 
     return b.ToString(); 
    } 
} 

के रूप में अशक्त-मूल्य क्रमानुसार करने के लिए सबसे उपयुक्त स्ट्रिंग क्या होती है करने के लिए परिवर्तित करके बस एक नल bool को क्रमानुसार करना चाहते हैं?

+0

आपके इनपुट के लिए सभी को धन्यवाद! –

+1

निश्चित रूप से यह है: 'सत्य', 'झूठा' और 'फ़ाइल नॉटफाउंड'! (डेली डब्ल्यूटीएफ साइट पर जाएं)। – Skizz

उत्तर

8

बूल के बाद से। टॉस्ट्रिंग() "ट्रू" या "झूठा" लौटाता है, मैं "नल" के साथ जाऊंगा। मैं इसे इस प्रकार भी लिखूंगा:

return b.HasValue ? b.ToString() : "Null"; 

संपादित करें: मैं इसे वापस लेता हूं। बूल? .ToString() खाली स्ट्रिंग देता है, इसलिए मैं तय करता हूं कि क्या अधिक सुविधाजनक है। अगर किसी व्यक्ति को आउटपुट पढ़ने की जरूरत है तो "नल" एक बेहतर विकल्प है; अगर इसे केवल कोड में उपयोग करने की आवश्यकता है तो खाली स्ट्रिंग ठीक है। यदि आप खाली स्ट्रिंग के साथ जाते हैं तो यह उतना आसान है जितना:

return b.ToString(); 
2

मैं शून्य-मूल्य का प्रतिनिधित्व करने के लिए एक खाली स्ट्रिंग का चयन करूंगा।

2

आप सही/असली bool मूल्यों के लिए झूठी लौट रहे हैं तो आप मामले में समरूपता के लिये अशक्त लौट जाना bnull है।

2

सुसंगत रहें।

b.ToString() 

तारों को 'सत्य' या 'झूठा' देता है। इस प्रकार यदि आप वापस आते हैं तो यदि आप वास्तव में धारावाहिक फ़ाइलों को पढ़ते हैं तो यह कम संगत होगा। Deserialization कोड भी "बदसूरत" और कम पठनीय बन जाएगा।

मैं स्ट्रिंग 'अनसेट' (या उन पंक्तियों के साथ कुछ) या स्ट्रिंग 'नल' पर इसे क्रमबद्ध करना चुनूंगा। जब तक कि आपके पास अतिरिक्त वर्णों को क्रमबद्ध करने के लिए वास्तव में सख्त स्पेस आवश्यकताएं या वास्तव में विशाल डेटासेट नहीं हैं, वास्तव में कोई फर्क नहीं पड़ता।

8

नहीं क्यों:

b.ToString() 

तो ख रिक्त है, तो यह एक खाली स्ट्रिंग देता है। चूंकि ढांचा वापस आता है, इसलिए मैं इसे लगातार बनाए रखने के लिए उपयोग करता हूं। यह भी XmlSerializer नालीबल स्केलर के लिए उपयोग करता है।

1

आप उपयोग कर रहे हैं बनाया XmlSerializer में आप भी कर सकते हैं मूल्य को क्रमानुसार (और बदसूरत कस्टम क्रमांकन कोड का एक बहुत रोकने) के लिए निम्न:

[Serializable] 
    public class Foo 
    { 
     [XmlIgnore] 
     public bool? Bar { get; set; } 

     [XmlAttribute("Bar")] 
     [EditorBrowsable(EditorBrowsableState.Never)] 
     public string xmlBar 
     { 
      get { return Bar.ToString(); } 
      set 
      { 
       if (string.IsNullOrEmpty(value)) Bar = null; 
       else Bar = bool.Parse(value); 
      } 
     } 
    } 
+0

मैंने वास्तव में यह देखने के लिए जांच नहीं की कि XmlSerializer सही ढंग से एक नालीदार बूल को संभालेगा, इसलिए यह अनियंत्रित हो सकता है। – Gord

0

व्यक्तिगत तौर पर मैं किसी का उपयोग नहीं होगा उपर्युक्त लेकिन कन्फिरियलाइज इंटरफ़ेस का उपयोग करें। उदाहरण के लिए,

[XmlElement("SomeBoolean ", Namespace = "SomeNamespace")] 
public bool? SomeBoolean { get; set; } 
public bool ShouldSerializeSomeBoolean() { return SomeBoolean.HasValue; } 
संबंधित मुद्दे