0

我定义了一本字典。

Dictionary<string, string> dataSource;

有一个函数以这样的方式定义,这个字典将被填充至少一个。

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

l2ListText并且l2ListValueList<String> 这个填充的datasource字典用作列表框的数据源。

第二轮,它检查一个列表框是否为空,当它不为空时,我想将值附加到它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),这将失败。如果需要,您可以覆盖现有成员 insted:

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