2010-12-02 12 views
132

मैं एक enumशून्य पर

string name; 

public enum Color 
{ 
    Red, 
    Green, 
    Yellow 
} 

कैसे लोड पर शून्य करने के लिए इसे स्थापित करने के लिए enum कैसे सेट करें।

name = ""; 
Color color = null; //error 

संपादित: मेरे बुरा है, मैं इसे ठीक से नहीं समझा था। लेकिन शून्य से संबंधित सभी जवाब सही है। मेरी स्थिति यह है कि, यदि मुझे कक्षा में एनम के लिए अन्य तत्वों जैसे नाम आदि के साथ मिल गया है, तो पेज लोड पर मैं कक्षा को आरंभ करता हूं और मानों को शून्य में डिफ़ॉल्ट करने का प्रयास करता हूं। यहाँ (कोड सी # में है) परिदृश्य है:

namespace Testing 
{ 
    public enum ValidColors 
    { 
     Red, 
     Green, 
     Yellow 
    } 

    public class EnumTest 
    { 
     private string name; 
     private ValidColors myColor; 

     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 

     public ValidColors MyColor 
     { 
      get { return myColor; } 
      set { myColor = value; } 
     } 

    } 

    public partial class _Default : System.Web.UI.Page 
    {  
     protected void Page_Load(object sender, EventArgs e) 
     { 
      EnumTest oEnumTest = new EnumTest(); 
      oEnumTest.Name = ""; 
      oEnumTest.MyColor = null; //??? 
     } 
    } 

} 

फिर सुझावों का उपयोग करके नीचे मैं समझ गया और सेट के तरीकों के साथ काम करने के लिए ऊपर दिए गए कोड बदल दिया है। मुझे बस "?" जोड़ने की ज़रूरत है

public class EnumTest 
{ 
    private string name; 
    private ValidColors? myColor; //added "?" here in declaration and in get/set method 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public ValidColors? MyColor 
    { 
     get { return myColor; } 
     set { myColor = value; } 
    } 

} 

सुंदर सुझाव के लिए धन्यवाद सब: निजी enum चर की घोषणा के दौरान और प्राप्त/सेट विधि में EnumTest कक्षा में।

+0

संभावित डुप्लिकेट [सी # Enums: Nullable या 'अज्ञात' वैल्यू] (http://stackoverflow.com/questions/1795657/c-sharp-enums-nullable-or- अज्ञात मूल्य) –

उत्तर

264

आप या तो उपयोग कर सकते हैं एक शून्य प्रकार के लिए ऑपरेटर।

public Color? myColor = null; 

या कि enum में पहला मान होने से खाली नहीं रह सकती enums के लिए मानक अभ्यास का उपयोग (उर्फ 0) डिफ़ॉल्ट मान हो। उदाहरण के लिए रंग के मामले में कोई नहीं।

public Color myColor = Color.None; 
+58

डिफ़ॉल्ट मान के लिए +1। –

+0

@equiman को बाईं ओर निर्दिष्ट प्रकार के बाद से कास्ट करने की आवश्यकता नहीं है, आप मूल रूप से मेरे उत्तर के पहले भाग को डुप्लिकेट कर रहे हैं जो पहले ही स्वीकार कर लिया गया है। –

+2

इसने मेरे प्रश्न का उत्तर दिया: * क्या आप '?' जोड़ सकते हैं इसे नामुमकिन बनाने के लिए enumname करने के लिए? * – LuckyLikey

14

अपने चर को शून्य बनाओ। जैसा: "?"

Color? color = null; 

या

Nullable<Color> color = null; 
4

एक enum (मतलब है enum नहीं मान का एक संग्रह के लिए एक संदर्भ के रूप में, जो कुछ भी मूल्य यह है के रूप में संग्रहीत किया जाता है) सी # में एक "मूल्य" प्रकार है। आप मूल्य प्रकार को शून्य पर सेट नहीं कर सकते हैं (क्योंकि केवल संदर्भ प्रकारों के लिए शून्य का उपयोग किया जाता है)।

कहा जा रहा है आप Nullable<T> वर्ग जो मूल्य प्रकार इस तरह के लपेटता आप शून्य पर उन्हें सेट कर सकते हैं कि में बनाया का उपयोग कर सकते है, अगर यह HasValue और उसके वास्तविक Value पाने की जाँच करें। (उन Nullable<T> वस्तुओं पर दोनों तरीके हैं

name = ""; 
Nullable<Color> color = null; //This will work. 

भी एक शॉर्टकट का उपयोग कर सकते है:

Color? color = null; 

है वह उसी Nullable<Color> के रूप में;

31

इस सी # है, तो यह। काम नहीं करेगा: enums मूल्य प्रकार हैं, और null नहीं हो सकते हैं।

सामान्य विकल्प None सदस्य जोड़ना है:

public enum Color 
{ 
    None, 
    Red, 
    Green, 
    Yellow 
} 

Color color = Color.None; 

... या Nullable उपयोग करने के लिए:

Color? color = null; 
4

मैं C++ संभालने कर रहा हूँ यहाँ। यदि आप सी # का उपयोग कर रहे हैं, तो जवाब शायद वही है, लेकिन वाक्यविन्यास थोड़ा अलग होगा। enum int मानों का एक सेट है। यह एक वस्तु नहीं है, इसलिए आपको इसे शून्य पर सेट नहीं करना चाहिए। कुछ शून्य करने के लिए सेट करना मतलब है कि आप शून्य को संबोधित करने के लिए किसी ऑब्जेक्ट पर पॉइंटर इंगित कर रहे हैं। आप वास्तव में एक int के साथ ऐसा नहीं कर सकते हैं। आप एक इंट के साथ क्या करना चाहते हैं उसे उस मान पर सेट करना है जिसे आप आमतौर पर नहीं लेते हैं ताकि आप टेलिफोन कर सकें यदि यह एक अच्छा मूल्य है या नहीं। तो,

Color color = -1; 

-1 अपने रंग सेट या, आप 1 पर अपने enum शुरू करने और शून्य करने के लिए सेट कर सकते हैं। यदि आप अभी रंग को शून्य पर सेट करते हैं, तो आप इसे "लाल" पर सेट कर देंगे क्योंकि आपके enum में लाल शून्य है।

तो,

enum Color { 
red =1 
blue, 
green 
} 
//red is 1, blue is 2, green is 3 
Color mycolour = 0; 
की
संबंधित मुद्दे