具有多个参数的三元语句

时间:2012-10-24 01:03:27

标签: c# dictionary conditional ternary-operator

我将字典定义为:

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");

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

2 个答案:

答案 0 :(得分: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"
);

答案 1 :(得分: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");

只是另一种选择......