Pertanyaan bagaimana membandingkan string dengan enum di C #


string strName = "John";
public enum Name { John,Peter }

private void DoSomething(string myname)
{
case1:
     if(myname.Equals(Name.John) //returns false
     {

     }

case2:
     if(myname == Name.John) //compilation error
     {

     }

case3:
     if(myname.Equals(Name.John.ToString()) //returns true (correct comparision)
     {

     }
}

ketika saya gunakan .Equals itu referensi membandingkan dan ketika saya gunakan == itu berarti membandingkan nilai.

Apakah ada kode yang lebih baik daripada mengkonversi nilai enum ke ToString() untuk perbandingan? karena menghancurkan tujuan dari jenis nilai enum dan juga, ToString() pada enum sudah ditinggalkan ??


37
2017-07-16 16:50


asal


Jawaban:


Anda dapat menggunakan Enum.TryParse() metode untuk mengubah string ke nilai yang dihitung (diasumsikan itu ada):

Name myName;
if (Enum.TryParse(nameString, out myName))
{
    switch (myName) { case John: ... }
}

45
2017-07-16 16:53



Anda dapat mem-parsing nilai string dan melakukan perbandingan enum.

Enum.TryParse: Lihat http://msdn.microsoft.com/en-us/library/dd783499.aspx

Name result;
if (Enum.TryParse(myname, out result))
{
    switch (result)
    {
        case Name.John:
            /* do 'John' logic */
            break;
        default:
            /* unexpected/unspecialized enum value, do general logic */
            break;
    }
}
else 
{
    /* invalid enum value, handle */
}

Jika Anda hanya membandingkan satu nilai:

Name result;
if (Enum.TryParse(myname, out result) && result == Name.John)
{
     /* do 'John' logic */
}
else 
{
    /* do non-'John' logic */
}

19
2017-07-16 16:52



Jika Anda menggunakan .NET4 atau yang lebih baru, Anda dapat menggunakannya Enum.TryParse. dan Enum.Parse tersedia untuk .NET2 dan yang lebih baru

// .NET2 and later
try
{
    switch (Enum.Parse(typeof(Names), myName))
    {
        case John: ... 
        case Peter: ...
    }
}

// .NET4 and later
Name name;
if (Enum.TryParse(myName, out name))
    switch (name)
    {
        case John: ... 
        case Peter: ...
    }

3
2017-07-16 17:00



Satu solusi bisa untuk mendapatkan jenis enum, dan kemudian nama jenisnya.

myname.Equals(Enum.GetName(typeof(Name)))

http://msdn.microsoft.com/en-us/library/system.enum.getname.aspx


2
2017-07-16 16:53



Saya pikir Anda sedang mencari Enum.Parse() metode.

if(myname.Equals(Enum.Parse(Name.John)) //returns false
 {

 }

1
2017-07-16 16:53



Untuk beberapa alasan, solusi yang diberikan tidak berhasil untuk saya. Saya harus melakukannya dengan cara yang agak berbeda:

Name myName;
if (Enum.TryParse<Name>(nameString, out myName))
{
    switch (myName) { case John: ... }
}

Semoga ini membantu seseorang :)


0
2017-09-20 07:42