如何在C#中将字符串与枚举进行比较

时间:2012-07-16 16:50:31

标签: c# .net

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)
     {

     }
}

当我使用.Equals时,它是引用比较,当我使用==时,它意味着值比较。

是否有更好的代码而不是将枚举值转换为ToString()进行比较?因为它破坏了值类型枚举的目的,而且枚举上的ToString()已被弃用了?

6 个答案:

答案 0 :(得分:51)

您可以使用Enum.TryParse()方法将字符串转换为等效的枚举值(假设它存在):

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

答案 1 :(得分:23)

您可以解析字符串值并进行枚举比较。

Enum.TryParse:见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 */
}

如果您只是比较一个值:

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

答案 2 :(得分:4)

如果您使用的是.NET4或更高版本,则可以使用Enum.TryParse。并且Enum.Parse可用于.NET2及更高版本

// .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 :(得分:3)

一种解决方案可能是获取枚举的类型,然后是类型名称。

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

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

答案 4 :(得分:2)

出于某种原因,给定的解决方案并没有为我锻炼。我不得不采取一种略微不同的方式:

SQL> declare
  2  begin
  3    null;
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> create table create_test_table (
  2     test_column varchar(20)
  3  );

Table created.

希望它可以帮助某人:)

答案 5 :(得分:1)

我认为您正在寻找Enum.Parse()方法。

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

 }