c# - vanchit - एक एनम का प्रारंभिक मूल्य



राजस्थान नर्सेज एसोसिएशन vanchit facebook (7)

मेरे पास एक संपत्ति है जिसमें एक enum है

Enum है

/// <summary>
/// All available delivery actions
/// </summary>
public enum EnumDeliveryAction
  {
    /// <summary>
    /// Tasks with email delivery action will be emailed
    /// </summary>
    Email,

    /// <summary>
    /// Tasks with SharePoint delivery action 
   /// </summary>
   SharePoint
  }

जब मैं इस वर्ग का उदाहरण बनाता हूं, तो कोड में अब, क्या मैं enum फ़ील्ड का मान निर्दिष्ट करता हूं, लेकिन यह enumlist में पहले आइटम के लिए डिफ़ॉल्ट लगता है, न कि शून्य मान, यह कैसे काम करता है? यह सुनिश्चित करना कैसे संभव है कि अगर यह सेट नहीं है, तो enum को किसी प्रकार का शून्य मान मिलता है, मैं नहीं चाहता कि यह enum में पहले मान को डिफ़ॉल्ट कर दे।

https://ffff65535.com


Enums एक मूल्य प्रकार, इंक की तरह हैं। आपको इसे शून्य करने की आवश्यकता है ताकि पहले (या 0-परिभाषित) enum सदस्य को डिफ़ॉल्ट न हो।

public class MyClass
{
   public EnumDeliveryAction? DeliveryAction { get; set;}
}

आप किसी भी मूल्य (जैसे 1) पर अपने enums शुरू कर सकते हैं, लेकिन जब वे डेटाबेस में एक लुकअप मान का प्रतिनिधित्व करते हैं, तो आप आम तौर पर उन्हें मैच करना चाहते हैं।

मैं आम तौर पर .NET फ्रेमवर्क डिज़ाइन दिशानिर्देशों के अनुसार, ऐसा करने के लिए समझ में आता है जब पहले एनम को कोई नहीं (= 0) घोषित करता है।


एनम फ़ील्ड शून्य के रूप में शुरू किया जाता है; यदि आप किसी enum में मान निर्दिष्ट नहीं करते हैं, तो वे शून्य से शुरू होते हैं ( Email = 0 , SharePoint=1 , आदि)।

इस प्रकार डिफ़ॉल्ट रूप से आप जो भी फ़ील्ड शुरू करते हैं वह स्वयं Email होगा। ऐसे मामलों के लिए None=0 जोड़ने के लिए अपेक्षाकृत आम है, या वैकल्पिक रूप से Nullable<T> उपयोग करें; अर्थात

/// <summary>
/// All available delivery actions
/// </summary>
public enum EnumDeliveryAction
{
    /// <summary>
    /// Not specified
    /// </summary>
    None,

    /// <summary>
    /// Tasks with email delivery action will be emailed
    /// </summary>
    Email,

    /// <summary>
    /// Tasks with SharePoint delivery action 
   /// </summary>
   SharePoint
}

आपको यह भी सुनिश्चित करना चाहिए कि कभी भी अपने अंतिम अपेक्षित मान को डिफ़ॉल्ट के रूप में न मानें; अर्थात

switch(action) {
    case EnumDeliveryAction.Email; RunEmail(); break;
    default: RunSharePoint(); break;
}

यह होना चाहिए:

switch(action) {
    case EnumDeliveryAction.Email; RunEmail(); break;
    case EnumDeliveryAction.SharePoint; RunSharePoint(); break;
    default: throw new InvalidOperationException(
          "Unexpected action: " + action);
}

एनम्स मूल्य प्रकार हैं। मूल्य प्रकार शून्य नहीं हो सकते हैं और 0 में आरंभ किए गए हैं।

यहां तक ​​कि यदि आपके enum में 0 नहीं है, तो enum variables को 0 में प्रारंभ किया जाएगा।

public enum SomeEnum
{
    A = 1,
    B = 2
}

(बाद में)

SomeEnum x = default(SomeEnum);
Console.WriteLine(x);

आउटपुट - 0

कुछ उत्तरदाता आपकी प्रारंभिक अपेक्षाओं से मेल खाने के लिए Nullable<T> का उपयोग करने की वकालत कर रहे हैं। इस सलाह के साथ Nullable<T> क्योंकि Nullable<T> अभी भी एक मान प्रकार है और संदर्भ प्रकारों की तुलना में अलग अर्थशास्त्र है। उदाहरण के लिए, यह कभी भी एक शून्य संदर्भ अपवाद उत्पन्न नहीं करेगा (यह संदर्भ नहीं है)।

SomeEnum? x = default(SomeEnum?);

if (x == null)
{
    Console.WriteLine("It's null!");
}
if (x > SomeEnum.B)
{
}
else
{
    Console.WriteLine("This runs even though you don't expect it to");
}

डिफ़ॉल्ट रूप से केवल संदर्भ प्रकार शून्य प्रकार हैं। यदि आप एक चर को नल की अनुमति देने के लिए चाहते हैं तो आपको इसे "?" का उपयोग करके निरर्थक रूप से परिभाषित करना होगा चरित्र (इसके लिए आपको सी # 2.0 या ऊपर की आवश्यकता है)।

enum MyEnum
{
    ValueOne,
    ValueTwo
}

और आपकी कक्षा में

MyEnum? myvariable = null;

मैं आपके पहले enum मान के रूप में कोई नहीं = 0 का मान रखने का सुझाव दूंगा। इसे स्पष्ट बनाएं, फिर आप यह सुनिश्चित करने के लिए जानते हैं कि इसका मूल्य क्या है।


enum प्रकारों के लिए डिफ़ॉल्ट मान 0 (जो डिफ़ॉल्ट रूप से, गणना में पहला तत्व है)। किसी वर्ग के फ़ील्ड को डिफ़ॉल्ट मान में प्रारंभ किया जाएगा।

यदि आपको enum में किसी अज्ञात मान का प्रतिनिधित्व करने की आवश्यकता है, तो आप मान 0 के साथ Unknown तत्व जोड़ सकते हैं। वैकल्पिक रूप से, आप फ़ील्ड को Nullable<MyEnum> ( MyEnum? ) के रूप में घोषित कर सकते हैं।





enums