c# - 如何将 Switch 与字典值一起使用?

标签 c# dictionary switch-statement

在我的代码中,我想使用在数据包中编码为一个符号的项目的文本名称。

在通常情况下,1012将意味着 cat, dog, cat, frog对我来说,但是像这样的对还有很多,所以很难记住所有的。有时它们需要更改,所以我想我应该使用 Dictionary<string, int>为了这个目的。但是然后……

switch (symbol)
{
    case "0": { /* ... */ }
    case "1": { /* ... */ }
    case "2": { /* ... */ }
    case "n": { /* ... */ }
}

……变成……

switch (symbol)
{
    case kvpDic["cat"]: { /* ... */ }
    case kvpDic["dog"]: { /* ... */ }
    case kvpDic["frog"]: { /* ... */ }
    case kvpDic["something else"]: { /* ... */ }
}

工作室说我需要为我的开关使用常量。

如何让它发挥作用?

Upd:此类动物的数量及其值对仅在运行时已知,因此代码不能使用常量(我猜)。

最佳答案

你可以存储一个 Func<T>Action而不是在字典中。

var dict = new Dictionary<int, Action>();
dict.Add(1, () => doCatThing()); 
dict.Add(0, () => doDogThing());
dict.Add(2, () => doFrogThing());

然后,像这样使用它:

var action = dict[1];
action();

关于c# - 如何将 Switch 与字典值一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556451/

相关文章:

javascript - 根据结果​​在测验结束时按 ID 加载不同的 YouTube 视频

javascript - Jquery Javascript将if语句变成case语句不起作用

c# - 是否可以保证 AsyncCallbacks 始终在主线程上执行?

function - Clojure:在函数列表上的单个值上运行映射

python - 如何从 Python 中的两对文件中获取枢轴线?

java - 将不同类类型的对象作为 java 中映射中的值进行处理

php - 根据用户偏好从数据库加载CSS

C# - .NET 和 CF.NET 的代码编译器

c# - C# 类型的反射 : GetType( "myType" ) vs typeof( myType ) behavior differs. 为什么?

c# - 在使用 Entity Fluent API 映射的 View 中使用 ROW_NUMBER 设置主键会使 linq 超时