4

次のように定義された辞書があります。

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

ユーザーが選択した言語に基づいてキー/値を辞書に追加したいのですが、私の場合は次のようになります。

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

if/else を実行することもできますが、これを機能させる方法があるかどうかに興味があります。

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

Dictionary であるため、2 つの文字列を指定する必要があります。これは機能せず、「構文エラー、「:」が予想されます」というメッセージが表示されます。これは失われた原因ですか、それともこのアイデアを機能させるために変更/追加する必要があるものはありますか?

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

キーが常に同じままであると仮定すると、値にのみ適用されるように三項を短絡します (また、複数回比較する場合はisEnglishorisJapanese値を格納します):

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 に答える