将方法参数转换为枚举

时间:2013-08-22 14:07:19

标签: c# .net enums

我的枚举类型定义如下:

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

3 个答案:

答案 0 :(得分:1)

是的,你可以从intenum进行直接演员(假设该整数的enum表示存在)。

如果在解析使用Enum.IsDefined之前需要检查enum是否存在,即

if (Enum.IsDefined(typeof(Status), status))
{
    Account.Status = (Status)status;
}

答案 1 :(得分:1)

当然,你可以做到这一点。试着看看。

你也可以转向其他方式

(int)Account.Status

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

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

答案 2 :(得分: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);
}

如果您愿意,可以抛出异常。