codestory

Die Anleitung zu C# Enum

  1. Was ist C# Enum?
  2. Den Operator == benutzen um die Elemente von enum zu vergleichen
  3. Auf die Elemente von Enum durchsuchen
  4. Enum und Attribute
  5. Kann Enum die Methode haben oder nicht?

1. Was ist C# Enum?

enum im C# ist ein Schlüsselwort zur Anmeldung einer Aufzählungskollektion (enumeration).
Jetzt sehen wir, was sollen Sie ohne Enum in einigen Fällen machen, zum Beispiel, Sie brauchen eine Versammlung der Wochentage. Normalerweise definieren Sie 7 Konstante zur Vertretung der 7 Tage in einer Woche.
WeekDayConstants.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
    class WeekDayConstants
    {
         public const int MONDAY = 2;
         public const int TUESDAY = 3;
         public const int WEDNESDAY = 4;
         public const int THURSDAY = 5;

         public const int FRIDAY = 6;
         public const int SATURDAY = 7;
         public const int SUNDAY = 1;
    }
}
Eine Klasse mit einer Methode zur Bezeichnung einer Arbeit entspricht dem Tag in Woche. (wie ein Zeitplan)
Timetable.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
    class Timetable
    {
        // Returns name of Job will do
        public static String getJob(int dayInWeek)
        {
            if (dayInWeek == WeekDayConstants.SATURDAY
                    || dayInWeek == WeekDayConstants.SUNDAY)
            {
                return "Nothing";
            }
            return "Coding";
        }
    }
}
Es ist sehr klar, dass die Code derselbe nicht sicher sein. Zum Beispiel, wenn Sie die Wert für die Wochentag leider simultan eingeben. Oder wenn Sie die Methode Timetable.getJob(int) aufrufen aber die Wert außerhalb der vorher definierten Werten übertragen
  • Nicht sicher sein: Wenn Sie Ihre Code nicht sicher sehen, können Sie die Methode GetJob(int) aufrufen und irgendeine Wert übertragen.
  • Keine Bedeutung im Drucken: Wenn Sie die Wochentage in die Zahl statt eine sinvolle Schrift wie "MONDAY".ausdrucken
Und hier ist die Benutzung von Enum zur Definition der Wochentage
WeekDay.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
    public enum WeekDay
    {
       MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
}
Und das Beispiel über die Benutzung der enum WeekDay:
Timetable2.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
    class Timetable2
    {
        public static String getJob(WeekDay weekDay)
        {
            if (weekDay == WeekDay.SATURDAY || weekDay == WeekDay.SUNDAY)
            {
                return "Nothing";
            }
            return "Coding";
        }
    }
}

2. Den Operator == benutzen um die Elemente von enum zu vergleichen

Enum ist ein reference object wie eine Klasse, Interface aber es kann die Vergleich == benutzen.
Sehen Sie bitte, wie die reference object vergleichen:
// To compare the reference object, generally used method equals(..)
object obj1 = ...;

// Comparing object with null, can use the == operator
if (obj1 == null)
{

}

object obj2 = ...;
// Not null
if (obj1 != null)
{
    // Comparing two objects.
    if (obj1.Equals(obj2))
    {

    }
}
Mit Enum können Sie den Operator == zu vergleichen
CompareEnumDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
   class CompareEnumDemo
   {
       public static void Main(string[] args)
       {
           WeekDay today = WeekDay.SUNDAY;
           // Use the == operator to compare two elements of Enum
           if (today == WeekDay.SUNDAY)
           {
               Console.WriteLine("Today is Sunday");
           }
           Console.Read();
       }
   }
}

3. Auf die Elemente von Enum durchsuchen

Wir können alle Elemente der Enum durchsuchen. Bitte sehen Sie das Beispiel
ValuesDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
    class ValuesDemo
    {
        public static void Main(string[] args)
        {
            // Get all the elements of the Enum.
            Array allDays = Enum.GetValues(typeof(WeekDay));
            foreach (WeekDay day in allDays)
            {
                Console.WriteLine("Day: " + day);
            }
            Console.Read();
        }   
    }
}
Das Ergebnis zum Beispiel starten:
Day: MONDAY
Day: TUESDAY
Day: WEDNESDAY
Day: THURSDAY
Day: FRIDAY
Day: SATURDAY
Day: SUNDAY

4. Enum und Attribute

SIe können die Attribute auf die Elemente des Enum heften, das Enum mehr Information machen und Sie können die jeder Elemente Enum entsprechenden Information nehmen
Mehr sehen
  • Hướng dẫn sử dụng C# Attribute
GenderAttr.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
    class GenderAttr : Attribute
    {
        // code: M, text = Male
        // code: F, text = Female
        internal GenderAttr(string code, string text)
        {
            this.Code = code;
            this.Text = text;
        }
        public string Code { get; private set; }
        public string Text { get; private set; }  
    }
}
enum Gender (Geschlecht) hat 2 Elemente MALE (Man) und FEMALE (Frau).
Gender.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
    public enum Gender
    {
        // A element of Enum, has attribute
        [GenderAttr("M","Male")]
        MALE,
        // A element of Enum, has attribute
        [GenderAttr("F","Female")]
        FEMALE
    }
}
Genders.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace CSharpEnumTutorial
{
    class Genders
    {
        // Returns Gender corresponding to the code.
        // (This method may returns null)
        public static Gender? GetGenderByCode(string code)
        {
            // Get all the elements of the Enum.
            Array allGenders = Enum.GetValues(typeof(Gender));

            foreach (Gender gender in allGenders)
            {
                string c = GetCode(gender);
                if (c == code)
                {
                    return gender;
                }
            }
            return null;
        }
        public static string GetText(Gender gender)
        {
            GenderAttr genderAttr = GetAttr(gender);
            return genderAttr.Text;
        }
        public static string GetCode(Gender gender)
        {
            GenderAttr genderAttr = GetAttr(gender);
            return genderAttr.Code;
        }
        private static GenderAttr GetAttr(Gender gender)
        {
            MemberInfo memberInfo = GetMemberInfo(gender);
            return (GenderAttr)Attribute.GetCustomAttribute(memberInfo, typeof(GenderAttr));
        }
        private static MemberInfo GetMemberInfo(Gender gender)
        {
            MemberInfo memberInfo
                = typeof(Gender).GetField(Enum.GetName(typeof(Gender), gender));

            return memberInfo;
        }
    }
}
Und das Beispiel über die Benutzung des enum Gender:
GenderTest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
   class GenderTest
   {
       public static void Main(string[] args)
       {
           Gender marryGender = Gender.FEMALE;
           Console.WriteLine("marryGender: " + marryGender);
           Console.WriteLine("Code: " + Genders.GetCode(marryGender)); // F
           Console.WriteLine("Text: " + Genders.GetText(marryGender)); // Femate
           String code = "M";
           Console.WriteLine("Code: " + code);
           // Phương thức có thể trả về null.
           Gender? gender = Genders.GetGenderByCode(code);
           Console.WriteLine("Gender by code: " + gender);
           Console.Read();
       }
   }
}
Das Beispiel starten
marryGender: FEMALE
Code: F
Text: Female
Code: M
Gender by code: MALE

5. Kann Enum die Methode haben oder nicht?

Im C# hat enum keine Methode, aber falls Sie etwas wie Enum und eine Methode haben möchten, können Sie eine Klasse definieren. Diese Klasse genehmigt, kein Objekt außer seiner vorhandenen Objekte zu erstellen.
GenderX.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpEnumTutorial
{
   class GenderX
   {
       public static readonly GenderX MALE = new GenderX("M","Male");
       public static readonly GenderX FEMALE = new GenderX("F","Female");
       private string code;
       private string text;

       // Private Constructor: Do not allow creating objects from outside class.
       private GenderX(string code, string text)
       {
           this.code = code;
           this.text = text;
       }
       public string GetCode()
       {
           return this.code;
       }
       public string GetText()
       {
           return this.text;
       }
       public static GenderX GetGenderByCode(string code)
       {
           if (MALE.code.Equals(code))
           {
               return MALE;
           }
           else if (FEMALE.code.Equals(code))
           {
               return FEMALE;
           }
           return null;
       }
   }
}