关于C#:将方法参数转换为枚举

Converting a method argument into an enum

本问题已经有最佳答案,请猛点这里访问。

我有一个这样定义的枚举类型:

1
2
3
4
5
public enum Status
{
    Active=1,
    InActive=0
}

在我的方法中,我可以像这样将参数强制转换为枚举:

1
2
3
4
5
6
7
8
9
10
11
public string doSomething(string param1, int status)
{
//will this work?      
Account.Status = (Status) status;
//or do i need to test one by one like this
if(status == 0)
{
 Account.Status = Status.Inactive;
 //and so on...
} // end if
}  // end doSomething


只需检查int是否是状态的有效值,然后进行转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public string doSomething(string param1, int status)
{
    if (IsValidEnum<Status>(status))
    {
        Account.Status = (Status)status;
    }
    ...
}

private bool IsValidEnum<T>(int value)
{
    var validValues = Enum.GetValues(typeof(T));
    var validIntValues = validValues.Cast<int>();
    return validIntValues.Any(v => v == value);
}

在"如果愿意,可以抛出异常"的"其他"中。


当然可以。试试看。

你也可以用另一种方式

1
(int)Account.Status

可以将枚举强制转换为int,反之亦然,因为每个枚举实际上都由每个默认值的int表示。您应该手动指定成员值。默认情况下,它从0到N开始。

如果您试图转换一个不存在的枚举值,它将起作用,但如果您试图将它与枚举中的任何值进行比较,它将不会给您一个枚举值。


是的,可以直接从int转换为enum(假定存在该整数的enum表示)。

如果需要在解析之前检查enum是否存在,请定义use enum.isdefined,即

1
2
3
4
if (Enum.IsDefined(typeof(Status), status))
{
    Account.Status = (Status)status;
}