كيفية الحصول على القيمة الأساسية للتعداد

StackOverflow https://stackoverflow.com/questions/97391

  •  01-07-2019
  •  | 
  •  

سؤال

لقد أعلن التعداد التالي:

 public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' }

كيف يمكنني الحصول على القيمة "S" من TransactionTypeCode.Shipment أو "R" من TransactionTypeCode.Receipt؟

يؤدي إجراء TransactionTypeCode.ToString() ببساطة إلى إعطاء سلسلة من اسم Enum "Shipment" أو "Receipt" حتى لا يقطع الخردل.

هل كانت مفيدة؟

المحلول

جرب هذا:

string value = (string)TransactionTypeCode.Shipment;

نصائح أخرى

يجب عليك التحقق من النوع الأساسي للتعداد ثم التحويل إلى النوع المناسب:

public enum SuperTasks : int
    {
        Sleep = 5,
        Walk = 7,
        Run = 9
    }

    private void btnTestEnumWithReflection_Click(object sender, EventArgs e)
    {
        SuperTasks task = SuperTasks.Walk;
        Type underlyingType = Enum.GetUnderlyingType(task.GetType());
        object value = Convert.ChangeType(task, underlyingType); // x will be int
    }    

أعتقد أن Enum.GetValues() هو ما تبحث عنه.

لا يزال النوع الأساسي للتعداد الخاص بك هو int، فقط هناك تحويل ضمني من char ل int لسبب ما.التعداد الخاص بك يعادل

TransactionTypeCode { Shipment = 83, Receipt = 82, }

لاحظ ذلك أيضًا enum يمكن أن يحتوي على أي نوع متكامل كنوع أساسي باستثناء char, ربما لسبب دلالي.هذا غير ممكن:

TransactionTypeCode : char { Shipment = 'S', Receipt = 'R', }

للحصول على char استعادة القيمة، يمكنك فقط استخدام طاقم الممثلين.

var value = (char)TransactionTypeCode.Shipment;

// or to make it more explicit:
var value = Convert.ToChar(TransactionTypeCode.Shipment);

والثاني يسبب الملاكمة، وبالتالي ينبغي أن يؤدي إلى أسوأ.لذلك قد يكون أفضل قليلاً

var value = Convert.ToChar((int)TransactionTypeCode.Shipment);

ولكن قبيحة.نظرًا للمفاضلة بين الأداء/سهولة القراءة، أفضّل الإصدار (الممثل) الأول..

كنت أبحث عن ذلك وأحصل على الحل استخدم فئة التحويل

int value = Convert.ToInt32(TransactionTypeCode.Shipment);

انظر كيف أنه من السهل

هذه هي الطريقة التي أقوم بها بشكل عام بإعداد التعدادات الخاصة بي:

public enum TransactionTypeCode {

  Shipment("S"),Receipt ("R");

  private final String val;

  TransactionTypeCode(String val){
    this.val = val;
  }

  public String getTypeCode(){
    return val;
  }
}

System.out.println(TransactionTypeCode.Shipment.getTypeCode());

يجب أن تكون القيم الأساسية للتعداد رقمية.إذا كان نوع القيم الأساسية معروفًا، فإن عملية تحويل بسيطة تُرجع القيمة الأساسية لمثيل معين من التعداد.

enum myEnum : byte {Some = 1, SomeMore, Alot, TooMuch};
myEnum HowMuch = myEnum.Alot;
Console.Writeline("How much: {0}", (byte)HowMuch);

انتاج:كم ثمن:3

أو (أقرب إلى السؤال الأصلي)

enum myFlags:int {None='N',Alittle='A',Some='S',Somemore='M',Alot='L'};
myFlags howMuch = myFlags.Some;
Console.WriteLine("How much: {0}", (char)howMuch);
//If you cast as int you get the ASCII value not the character.

هذا سؤال متكرر بالنسبة لي، ودائمًا ما أنسى أن طاقم التمثيل البسيط يمنحك القيمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top