c# - 将 'switch' 与资源文件中的字符串一起使用

标签 c# .net switch-statement embedded-resource

我的资源 (.resx) 文件中有一堆字符串。我试图直接将它们用作 switch 语句的一部分(请参阅下面的示例代码)。

class Test
{
    static void main(string[] args)
    {
        string case = args[1];
        switch(case)
        {
            case StringResources.CFG_PARAM1: // Do Something1 
                break;
            case StringResources.CFG_PARAM2: // Do Something2
                break;
            case StringResources.CFG_PARAM3: // Do Something3
                break;              
            default:
                break;
        }
    }
}

我查看了一些解决方案,其中大多数似乎建议我需要将它们声明为 const string 我个人不喜欢。 我喜欢这个问题的最高投票解决方案:using collection of strings in a switch statement .但是我需要确保资源文件中的 enumstrings 绑定(bind)在一起。我想知道一种简洁的方法。

编辑: 还发现 this great answer在研究如何使用 Action 时:

最佳答案

你可以使用 Dictionary<string, Action> .你放一个 Action (方法的委托(delegate))为字典中的每个字符串并搜索它。

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
}

作为旁注,如果 Method1已经是 Actionvoid Method1()方法(没有参数也没有返回值),你可以这样做

    { "String1", (Action)Method1 },

关于c# - 将 'switch' 与资源文件中的字符串一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097129/

相关文章:

c# - 在 C# 的 Dynamic Linq 中使用 "Contains"关键字查询数据

.net - 使用 String.Format 避免资源(可本地化字符串)重复

c# - 使用代理在 C# 中拦截方法调用

Case 标签不会缩减为 C 中的整数常量?

ruby-on-rails - 执行 'case' 语句以匹配多个 'when' 条件

c# - 单元测试:测试的数据库设置

c# - 如何用TWAIN获取扫描仪的序列号?

c# - "Can' t 在 Xamarin Forms 项目中找到“NS*Types(例如 NSFileManager 或 NSUrl)

.net - LINQ 中的 Distinct 是什么意思?

java - 使用 switch 语句处理 fragment 中的 onBackPressed()