管理传递给函数的字符串参数而不使用枚举

时间:2014-03-10 11:48:01

标签: c# string enums arguments wrapper

我正在使用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"
}

显然,后者不合法。但有没有一种方法可以使用结构,类,任何可以使这个工作? 如果这没有意义,请告诉我。谢谢!

1 个答案:

答案 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()来获取其字符串表示。