4

我有一个字典定义为:

Dictionary<string, string> typeLookup = new Dictionary<string, string>();

我想根据用户选择的语言向字典中添加一个键/值,在我的例子中可以找到:

Request.Cookies["language"].Value == "ja-JP" //if true, Japanese, if false, English

我可以只做 if/elses,但我很好奇是否有某种方法可以使这项工作:

typeLookup.Add((Request.Cookies["language"].Value == "ja-JP") ? "6","中間" : "6","Q2");

因为它是字典,所以需要指定两个字符串。这不起作用,给我“语法错误,':'预期”。这是一个失败的原因,还是我需要更改/添加一些东西才能使这个想法生效?

4

2 回答 2

2

由于条件的双方使用相同的密钥,您可以作弊:

typeLookup.Add("6", (Request.Cookies["language"].Value == "ja-JP") ? "中間":"Q2");

然而,在一般情况下,你最终会得到一个相当丑陋、重复的语句:

typeLookup.Add(
    (Request.Cookies["language"].Value == "ja-JP") ? "6" : "7"
,   (Request.Cookies["language"].Value == "ja-JP") ? "中間" : "Q2"
);
于 2012-10-24T01:05:43.490 回答
1

假设密钥始终保持不变,将三元组短路以仅应用于该值(另外,如果您要多次比较,我会存储一个isEnglishisJapanese值):

typeLookup.add("6", Request.Cookies["language"] == "ja-JP" ? "中間" : "Q2");

但是,您始终可以创建一个助手:

Dictionary<string, string> typeLookup = new Dictionary<string, string>();

System.Action<String,String,String> japEng = (key,japaneseValue,englishValue) => {
  if (Request.Cookies["language"].Value == "ja-JP")
    typeLookup.Add(key, japaneseValue);
  else
    typeLookup.Add(key, englishValue);
};

japEng("6", "中間", "Q2");

只是另一种选择...

于 2012-10-24T01:11:53.887 回答