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

C# 将方法参数转换为枚举,c#,.net,enums,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

我的枚举类型定义如下:

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

是的,您可以直接从
int
转换到
enum
(假设存在该整数的
enum
表示)

如果在解析之前需要检查
枚举
是否存在,请使用


你当然能做到。试试看

你也可以换一种方式

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


如果您试图转换一个不存在的枚举值,它会起作用,但是如果您试图将它与枚举中的任何值进行比较,它不会给您一个枚举值,只需检查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);
}
公共字符串doSomething(字符串参数1,int状态)
{
if(异缬胺(状态))
{
帐户状态=(状态)状态;
}
...
}
私有布尔伊斯瓦利登(整数值)
{
var validValues=Enum.GetValues(typeof(T));
var validIntValues=validValues.Cast();
返回validIntValues.Any(v=>v==value);
}

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

为什么不运行代码并找出原因。@Kaf可能的原因:他使用的数据库支持
int
,但不支持
enum
。是的,它可以工作。然而,最好先检查int是否在声明的enum的范围内。我运行了代码…编译器没有抱怨。当传入一个不在enum中的值时会发生什么情况?@sirbombay你应该可以自己很容易地尝试一下……我实际上已经尝试过了……它编译得很好。但我担心的是传入一个不在枚举中的值时会发生什么enum?@sirbombay你可以试试2:)@sirbombay阅读我编辑的答案现在有了意义…我想我自己也应该了解一下:)当它不存在时会发生什么?被分配的变量会恢复为
int
-这两种类型都是可互换的,所以你不会得到异常。我想这就是我一直在寻找的魔力因为…谢谢
Enum.IsDefined
已经这样做了-请看我的答案。@James,好的,创建这个方法很有趣,但不太重要。。。
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);
}