我有以下枚举:
public enum AuthenticationMethod
{
FORMS = 1,
WINDOWSAUTHENTICATION = 2,
SINGLESIGNON = 3
}
Run Code Online (Sandbox Code Playgroud)
然而问题是,当我要求AuthenticationMethod.FORMS而不是id 1时,我需要"FORMS"这个词.
我找到了以下解决此问题的方法(链接):
首先,我需要创建一个名为"StringValue"的自定义属性:
public class StringValue : System.Attribute
{
private readonly string _value;
public StringValue(string value)
{
_value = value;
}
public string Value
{
get { return _value; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以将此属性添加到我的枚举器:
public enum AuthenticationMethod
{
[StringValue("FORMS")]
FORMS = 1,
[StringValue("WINDOWS")]
WINDOWSAUTHENTICATION = 2,
[StringValue("SSO")]
SINGLESIGNON = 3
}
Run Code Online (Sandbox Code Playgroud)
当然我需要一些东西来检索StringValue:
public static class StringEnum
{
public static string GetStringValue(Enum value)
{ …Run Code Online (Sandbox Code Playgroud) 如果我有这样的枚举:
enum Beer
{
Bud = 10,
Stella = 20,
Unknown
}
Run Code Online (Sandbox Code Playgroud)
为什么在将int超出这些值的值转换为某种类型时,它不会抛出异常Beer?
例如,以下代码不会抛出异常,它会向控制台输出"50":
int i = 50;
var b = (Beer) i;
Console.WriteLine(b.ToString());
Run Code Online (Sandbox Code Playgroud)
我觉得这很奇怪......任何人都可以澄清吗?