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开始。
如果您试图转换一个不存在的枚举值,它将起作用,但如果您试图将它与枚举中的任何值进行比较,它将不会给您一个枚举值。
是的,可以直接从
如果需要在解析之前检查
1 2 3 4 |