开发者

Using 'switch' with strings in resource file

I have a bunch of strings in my resource(.resx) file. I am trying to directly use them as part of switch statement (see the sample code below).

class Test
{
    static void main(string[] args)
    {
        string case = args[1];
        switch(case)
        {
            case StringResources.CFG_PARAM1: // Do Something1 
                break;
            case StringReso开发者_运维问答urces.CFG_PARAM2: // Do Something2
                break;
            case StringResources.CFG_PARAM3: // Do Something3
                break;              
            default:
                break;
        }
    }
}

I looked at some of the solutions, most of them seem to suggest that I need to declare them as const string which I personally dislike. I liked the top voted solution for this question: using collection of strings in a switch statement. But then I need to make sure that my enum and strings in resource file are tied together. I would like to know a neat way of doing that.

Edit: Also found this great answer while researching how to use Action:


You could use a Dictionary<string, Action>. You put an Action (a delegate to a method) for each string in the Dictionary and search it.

var actions = new Dictionary<string, Action> {
    { "String1", () => Method1() },
    { "String2", () => Method2() },
    { "String3", () => Method3() },
};

Action action;

if (actions.TryGetValue(myString, out action))
{
    action();
}
else
{
    // no action found
}

As a sidenote, if Method1 is already an Action or a void Method1() method (with no parameters and no return value), you could do

    { "String1", (Action)Method1 },


You can't do that. The compiler must be able to evaluate the values, which means that they need to be literals or constants.


I just came across this problem myself, and although this post is old, I thought I'd share my simple solution for other "Googlers"... I opted to change the switch...case to multiple if(...) elseif

class Test
{
    static void main(string[] args)
    {
        string case = args[1];
        if(case.Equals(StringResources.CFG_PARAM1))
        {
            // Do Something1
        }
        else if (case.Equals(StringResources.CFG_PARAM2))
        {
            // Do Something2
        }
        else if (case.Equals(StringResources.CFG_PARAM3))
        {
            // Do Something3
        }
        else
        {
            // Do something else
        }
    }
}

Definitely not as pretty as switch...case but has worked for me.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜