سؤال

ويقول لدي التعداد على النحو التالي (مأخوذة من MSDN سبيل المثال):

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

وبعد ذلك يمكنني أن استخدام في التعليمات البرمجية كما يلي:

int today = (int)Days.Sun;

والسؤال:

هل يمكنني تقييم تتضمن التعدادات؟ يقول لدي يوم متغير قيمته هو "الشمس". سوف Days.Day تقييم لDays.Sun؟

وشكرا!

تجدر لا نتوقف على سبيل المثال أيام وتقول لي أنني يجب أن تستخدم مقارنة الخ ... أنا أتطلع لتحل محل استخدام المصفوفات مع تتضمن التعدادات كما هو أكثر إحكاما. وذلك ما أنا أبحث عن هو أساسا القدرة على استرداد القيم من التعداد مماثلة لصفيف:

وmyArray [يوم] حيث اليوم سوف تقييم إلى مفتاح مجموعة ....

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

المحلول

هل أنا على حق في قوله كنت قد حصلت على:

string day = "Sun";

ووتريد أن نعود إلى Days.Sun قيمة؟

وإذا كان الأمر كذلك، استخدام:

string day = "Sun";
Day day = (Day) Enum.Parse(typeof(Days), day);

نصائح أخرى

نعم، يمكنك أن تفعل ذلك. يمكنك يلقي بحرية بين enum ونوعه الأساسي.

using System;

class Program
{
    static void Main()
    {
        // prints "zero"
        Console.WriteLine((Foo)0);
        // prints "1"
        Console.WriteLine((int)Foo.one);
    }
}

enum Foo { zero, one, two };

ويمكنك أيضا تحليل سلسلة القيم أيضا. باستخدام Enum.Parse

[TestFixture]
public class EnumParsingSO
{
    public enum Days
    {
        Sat = 1,
        Sun,
        Mon,
        Tues
    }

    [Test]
    public void EnumFromString()
    {
        Days expected = Days.Mon;
        int expectedInt = 3;
        Days actual = (Days)Enum.Parse(typeof(Days), "Mon");

        Assert.AreEqual(expected, actual);
        Assert.AreEqual(expectedInt, (int)actual);
    }
}

وكما يقول أندرو، يمكنك يلقي من التعداد نوعه الأساسي. يمكنك أيضا خدمة Unbox بين البلدين أيضا، وهناك والتحويل الضمني من ثابت 0 إلى أي نوع التعداد:

using System;

enum Demo { Foo, Bar, Baz };

class Test
{
    static void Main()
    {
        int i = 2;
        object o = i;
        // Unboxing from int to Demo
        Demo d = (Demo) o;
        Console.WriteLine(d);

        o = Demo.Baz;
        // Unboxing from Demo to int
        i = (int) o;
        Console.WriteLine(i);

        // Implicit conversion of 0
        d = 0;
        Console.WriteLine(d);
    }
}

ولكثافة نعم، ولكن لسلسلة يتعين عليك أن تفعل شيئا من هذا القبيل <لأ href = "http://weblogs.asp.net/stefansedich/archive/2008/03/12/enum-with-string-values-in- c.aspx "يختلط =" نوفولو noreferrer "> هذا

ونعم يمكنك، أنت فقط تحتاج إلى توفير قيمة عددية الأم لكل قيمة التعداد. من المثال الخاص بك:

enum Days {
    Sat=1, 
    Sun=2, 
    Mon=3, 
    Tue=4, 
    Wed=5, 
    Thu=6, 
    Fri=7
};

و(الآن، لماذا سيأمر أيام الأسبوع بهذه الطريقة هو خارج عن ارادتي ...)

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