如何从“名称”的字符串表示中选择枚举值?

时间:2011-11-16 00:23:05

标签: c# enums

我喜欢这样的

public enum PetType
{
    Dog = 1,
    Cat = 2
}

我也有string pet = "Dog"。我怎么回1?我正在考虑的伪代码是:

select Dog_Id from PetType where PetName = pet

5 个答案:

答案 0 :(得分:15)

使用Enum.Parse方法从字符串中获取枚举值,然后转换为int:

string pet = "Dog";
PetType petType = (PetType)Enum.Parse(typeof(PetType), pet);
int petValue = (int)petType;

答案 1 :(得分:4)

如果您使用的是.Net 4,则可以使用Enum.TryParse

PetType result;
if (Enum.TryParse<PetType>(pet, out result))
    return (int)result;
else
    throw something with an error message

答案 2 :(得分:4)

其他人已经建议使用Enum.Parse()但要小心这个方法,因为它不仅解析枚举的名称,而且还试图匹配其值。 为了清楚起见,我们来看看小例子:

PetType petTypeA = (PetType)Enum.Parse(typeof(PetType), "Dog");
PetType petTypeB = (PetType)Enum.Parse(typeof(PetType), "1");

两个解析调用的结果都是PetType.Dog(当然可以转换为int)。

在大多数情况下,这种行为都可以,但并非总是如此,这值得记住Enum.Parse()方法的行为。

答案 3 :(得分:0)

(PetType)Enum.Parse(typeof(PetType), pet)

答案 4 :(得分:0)

您可以使用字符串作为参数,如

int pet=1;
PetType petType = (PetType)Enum.Parse(typeof(PetType), pet.ToString());

或者

string pet="Dog";
PetType petType = (PetType)Enum.Parse(typeof(PetType), pet);