0

私は辞書を定義しています。

Dictionary<string, string> dataSource;

このディクショナリが少なくとも 1 つ満たされるように定義された関数があります。

dataSource = l2ListText
             .Zip(l2ListValue, (lText, lValue) => new { lText, lValue })
             .ToDictionary(x => x.lValue, x => x.lText);

l2ListText この入力されたディクショナリは、リストボックスのデータソースとして機能しますl2ListValueList<String>datasource

2回目は、リストボックスが空かどうかをチェックし、空でない場合は、これに値を追加しdataSourceて、データソースとしてリストボックスに再度割り当てます。

これを達成するのは難しいと思います。助けてください。

4

2 に答える 2

0

コードの主な問題は、Dictionary呼び出しごとに初期化することです。したがって、項目を追加することはできず、項目を設定するだけです。l2Lists

この行Dictionary<string, string> dataSource;をクラス レベルで移動して、メソッドへの呼び出しごとに同じインスタンスを確保する必要があります。

変更されたコードは以下のとおりです。

if (dataSource != null && lstbx_confiredLevel2List.Items.Count > 0) 
{ 
   dataSource.Add(l2ListValue[0], l2ListText[0]); 
} 
else { 
   dataSource = l2ListText .Zip(l2ListValue, (lText, lValue) => new { lText, lValue }) .ToDictionary(x => x.lValue, x => x.lText); 
} 
lstbx_confiredLevel2List.DataSource = dataSource; 
lstbx_confiredLevel2List.DataTextField = "Value"; 
lstbx_confiredLevel2List.DataValueField = "Key"; 
lstbx_confiredLevel2List.DataBind(); 
于 2013-02-21T10:11:38.447 に答える
0

LINQ.Zip拡張機能がなければ、次のこともできます。

dataSource = new Dictionary<string, string>();
int zipCount = Math.Min(l2ListText.Count, l2ListValue.Count);

for (int idx = 0; idx < zipCount; ++idx)
    datasource.Add(l2ListValue[idx], l2ListText[idx]);

forループはに追加されますDictionary<,>。同様のループを再度実行するとfor、新しい値が追加されます。同じ「キー」( のメンバーl2ListValue) が再度追加されると、これは失敗することに注意してください。必要に応じて、挿入された既存のメンバーを上書きできます。

for (int idx = 0; idx < zipCount; ++idx)
    datasource[l2ListValue[idx]] = l2ListText[idx];
于 2013-02-21T10:14:48.163 に答える