2013-02-27 25 views
8

के रूप में मैं एक enumEnum ToString एक नंबर

private enum TimeUnit 
{  
    Day, 
    Month, 
    Year 
} 

है और मैं में एक वर्णन पॉप्युलेट कर रहा हूँ प्रकट होता है। अधिकांश समय यह ठीक काम करता है और "दिन (ओं)" प्रदर्शित करता है, हालांकि किसी विशेष सर्वर पर यह "1 (एस)" ​​

के रूप में प्रदर्शित होता है इसका कारण क्या होगा?

+3

मेरा अनुमान नेट चलने के विभिन्न संस्करण होंगे? आप इसे यूनिट जोड़कर हल करते हैं। टॉस्ट्रिंग() – Marthin

+1

मुझे यह जानकर जानना होगा कि यह डिस्प्ले अलग-अलग बनाता है। यदि यह .NET संस्करण है, तो यह कब बदला गया था, और क्यों? –

+1

@ मार्थिन मेरा मानना ​​है कि आप शायद .NET संस्करण के साथ सही हैं (मैं अपना जवाब प्रश्न में नहीं रखना चाहता था) हालांकि स्ट्रिंग। कॉनकैट को एक अंतर्निहित ToString() का कारण होना चाहिए, इसलिए मुझे संदेह है कि यह बस जोड़ देगा स्वरूपण जानकारी देने के बिना बदलें। – Liath

उत्तर

5

उपयोग करने का प्रयास Enum.GetName()

यह भी safer होने का लाभ है चूंकि इसकी आवश्यकता है:

  • आपके द्वारा पारित मूल्य शून्य नहीं है।
  • आपके द्वारा पारित मूल्य एक प्रकार का है कि एक गणना वास्तव में अंतर्निहित प्रकार, या गणना के प्रकार के रूप में उपयोग कर सकती है। यह जांचने के लिए मूल्य पर GetType का उपयोग करता है।
+2

'एनम' शून्य नहीं हो सकता है, इनमें से अधिकतर स्किज़ोफ्रेनिक सुरक्षा है। –

+0

उचित बिंदु, मैंने अभी कॉपी और चिपकाया। अब संपादन – happygilmore

+0

मैंने यह फ़िक्स सबमिट कर दिया है - स्पष्ट रूप से मुझे पता है कि यह सही है या नहीं, मुझे सर्वर पर तैनाती की प्रतीक्षा करनी है! – Liath

0

क्योंकि Enum डिजिटल गणन तार के साथ optionnalyexpressed है

+2

हां, लेकिन यह स्पष्ट नहीं करता है कि दो अलग-अलग बक्से को अलग-अलग तरीके से ToString ऑपरेशन क्यों करना चाहिए। – Liath

3

आप प्रारूप चाहिए उचित रूप से ToString का उपयोग कर (उन्हें उर्फ ​​पर विचार करें):

return string.Concat(unit.ToString("F"), "(s)"); 
0

MSDN का कहना है:

इस विधि से काम करता है के रूप में अगर सामान्य प्रारूप चरित्र, "जी", निर्दिष्ट थे। यही है, अगर फ्लैग्स एट्रिब्यूट इस पर गणना नहीं किया गया है और के मान के बराबर नाम दिया गया है, तो वापसी मान एक स्ट्रिंग है जिसमें निरंतर नाम होता है। यदि FlagsAttribute लागू किया गया है और इस उदाहरण के मान के बराबर एक या अधिक नामित स्थिरांक का संयोजन है, तो वापसी मान एक स्ट्रिंग है जिसमें स्थिरांक के नामों की डिलीमीटर-पृथक सूची होती है। अन्यथा, वापसी मान इस उदाहरण के संख्यात्मक मान का स्ट्रिंग प्रतिनिधित्व है। (एक नामित लगातार इस उदाहरण के मूल्य के बराबर विचार FlagsAttribute लागू नहीं होती है और वहाँ है)

तो अपने मामले में आदर्श यह ठीक काम करना चाहिए। क्या आप बक्से के बीच अंतर का उल्लेख कर सकते हैं?

इसके अलावा, स्पष्ट संख्या देने का प्रयास करें।

private enum TimeUnit 
{  
    Day = 1, 
    Month = 2, 
    Year = 3 
} 
+1

है तो स्पष्ट मान देना कोई फर्क नहीं पड़ता। – Groo

+0

@ ग्रू, मैं सहमत हूं। हालांकि, एमएसडीएन विवरण के आधार पर यह * लगता है * कि वह 3 मामले में चल रहा है (अन्यथा, वापसी मान इस उदाहरण के संख्यात्मक मूल्य का स्ट्रिंग प्रतिनिधित्व है)। तो, हो सकता है कि यूनिट वैरिएबल में एनम रेंज के बाहर एक मूल्य हो (हालांकि 1 '(ओं) के अनुसार 1 होना चाहिए)। सीमित जानकारी के साथ, यह अनुमान है। – publicgk

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