จะรับอาร์เรย์ของค่า enum ทั้งหมดใน C # ได้อย่างไร?


92

ฉันมี enum ที่ฉันต้องการแสดงค่าที่เป็นไปได้ทั้งหมดของ มีวิธีรับอาร์เรย์หรือรายการค่าที่เป็นไปได้ทั้งหมดของ enum แทนที่จะสร้างรายการด้วยตนเองหรือไม่? เช่นถ้าฉันมี enum:

public enum Enumnum { TypeA, TypeB, TypeC, TypeD }

ฉันจะได้รับList<Enumnum>ที่ประกอบด้วยได้{ TypeA, TypeB, TypeC, TypeD }อย่างไร


4
สามารถทำซ้ำการแปลง enum เป็นรายการใน c #
Mark Byers

คำตอบ:


166

สิ่งนี้ทำให้คุณได้รับอาร์เรย์ธรรมดาของค่า enum โดยใช้Enum.GetValues:

var valuesAsArray = Enum.GetValues(typeof(Enumnum));

และสิ่งนี้จะทำให้คุณได้รับรายการทั่วไป:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();

ขอบคุณสิ่งที่ฉันกำลังมองหา!
Mark LeMoine

5
สิ่งนี้ทำให้ฉันสงสัยอยู่เสมอว่าทำไมEnumnum.GetValues()และEnumnum.GetNames()ไม่มีอยู่จริง
dalle

8
var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));สำหรับตัวแปรอาร์เรย์ที่ประเภทองค์ประกอบเป็นที่รู้จักกันที่รวบรวมเวลาการใช้งาน
Jeppe Stig Nielsen

หรือEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5

@ mr5: ในตัวอย่างของคุณควรActualTypeหมายความว่าอย่างไร? สำหรับ enum มันจะอยู่Enumnumในตัวอย่างของ OP หรืออาจเป็นประเภทพื้นฐาน (โดยปกติint) คุณมีอะไรในใจอีกไหม?
Dirk Vollmar

16

ลองใช้รหัสนี้:

Enum.GetNames(typeof(Enumnum));

สิ่งนี้ส่งคืน a string[]พร้อมชื่อ enum ทั้งหมดของ enum ที่เลือก


1
ส่งคืนชื่อของค่า enum OP ดูเหมือนจะตามหลังค่าตัวเอง
Michael Petrotta


5

คุณอาจต้องการทำสิ่งนี้:

public enum Enumnum { 
            TypeA = 11,
            TypeB = 22,
            TypeC = 33,
            TypeD = 44
        }

ทุกค่า int นี้มีenum11,22,33,44

คุณสามารถรับค่าเหล่านี้ได้จากสิ่งนี้:

var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e);

string.Join(",", enumsValues)คือ11,22,33,44.



2

ด้วยสิ่งนี้:

string[] myArray = Enum.GetNames(typeof(Enumnum));

และคุณสามารถเข้าถึงอาร์เรย์ค่าได้ดังนี้:

Array myArray = Enum.GetValues(typeof(Enumnum));

1
Enum.GetValues ​​ไม่ส่งคืนสตริง []
messenger


1

หากคุณต้องการวิธีทั่วไปมากกว่านี่คือ คุณสามารถเพิ่มตัวแปลงเพิ่มเติมได้ตามความต้องการของคุณ

    public static class EnumConverter
    {

        public static string[] ToNameArray<T>()
        {
            return Enum.GetNames(typeof(T)).ToArray();
        }

        public static Array ToValueArray<T>()
        {
            return Enum.GetValues(typeof(T));
        }

        public static List<T> ToListOfValues<T>()
        {
            return Enum.GetValues(typeof(T)).Cast<T>().ToList();
        }


        public static IEnumerable<T> ToEnumerable<T>()
        {
            return (T[])Enum.GetValues(typeof(T));
        }

    }

การใช้งานตัวอย่าง:

   string[] roles = EnumConverter.ToStringArray<ePermittedRoles>();
   List<ePermittedRoles> roles2 = EnumConverter.ToListOfValues<ePermittedRoles>();
   Array data = EnumConverter.ToValueArray<ePermittedRoles>();

0

คุณยังสามารถใช้

var enumAsJson=typeof(SomeEnum).Name + ":[" + string.Join(",", Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().Select(e => e.ToString())) + "]";

เพื่อรับองค์ประกอบทั้งหมดใน enum ในรูปแบบ json


0

OP ขอวิธีรับอาร์เรย์ของenumค่าทั้งหมดใน C #?

จะเกิดอะไรขึ้นถ้าคุณต้องการรับอาร์เรย์ของenumค่าที่เลือกใน C #?

Enum ของคุณ

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

หากคุณต้องการเพียงแค่เลือกSundayจากEnumไฟล์.

  WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday };

  WeekDays[] weekDaysArray2 = Enum.GetValues(typeof(WeekDays)).Cast<WeekDays>().Where
  (x => x == WeekDays.Sunday).ToArray();

เครดิตไปที่ผู้มีความรู้ tl.

อ้างอิง:

1.

2.

ความหวังช่วยใครบางคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.