4

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

public enum Status
{
    Active=1,
    InActive=0
}

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

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
4

3 回答 3

2

Yes, you can do a straight cast from int to enum (given that an enum representation of that integer exists).

If you need to check whether the enum exists before parsing use Enum.IsDefined i.e.

if (Enum.IsDefined(typeof(Status), status))
{
    Account.Status = (Status)status;
}
于 2013-08-22T14:08:47.140 回答
1

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

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);
}

如果您愿意,可以在 if 的 de else 中抛出异常。

于 2013-08-22T14:44:01.693 回答
1

当然,你可以这样做。试试看。

你也可以用另一种方式投射

(int)Account.Status

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

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

于 2013-08-22T14:11:39.553 回答