我正在使用WebRequest来调用API。我想为调用指定要使用的变量路由的包装器。目前,我所能提出的只是一个枚举,然后是一个切换声明。
public void WebRequestWrapper(MyEnum arg)
{
string argument = string.Empty;
switch(arg)
{
case MyEnum.MySpecifiedArgument:
argument = "MySpecifiedArgument";
break;
// etc etc...
}
var request = new WebRequest.Create(myUrl + argument);
// etc, etc...
}
我的问题是,有没有办法使用枚举,以便我不必使用switch语句?所以我能做到:
public void WebRequestWrapper(MyArgCollection arg)
{
var request = new WebRequest.Create(myUrl + arg);
// etc, etc...
}
其中MyArgCollection是一些自定义类/ struct /类似于enum,而'arg'代表一个字符串?我知道我可以使用反射和枚举助手类,但我已经读过那不是特别快。
使用枚举,您可以:
enum MyEnum {
stuff = 3,
fred = 5,
plant = 125
}
而我想要的是:
enum MyEnum {
stuff = "Things in my room",
fred = "A guy down the street",
plant = "No longer alive"
}
显然,后者不合法。但有没有一种方法可以使用结构,类,任何可以使这个工作? 如果这没有意义,请告诉我。谢谢!
答案 0 :(得分:1)
更改问题后的更新: 因此,您希望将自定义字符串附加到每个枚举值。您可以使用以下属性:
enum MyEnum
{
[Description("Things in my room")]
stuff,
[Description("A guy down the street")]
fred,
...
}
当然,您需要创建DescriptionAttribute
课程。
然后您可以添加扩展方法:
public static string GetDescription(this Enum e);
此方法将查看枚举值是否为DescriptionAttribute
,如果是,则返回其内容。如果没有,它应该返回e.ToString()
。
回答老问题:
您可以使用arg.ToString()
来获取其字符串表示。