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()
已被弃用了?
答案 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
{
}