2013-02-21 4 views
0

У меня есть определенный словарь.Как добавить в словарь?

Dictionary<string, string> dataSource; 

Существует функция, определенная таким образом, что этот Словарь будет заполняться по крайней мере.

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

l2ListText и l2ListValue являются List<String> Это заполняется datasource словарь служит в качестве источника данных для списка.

И во второй раз он проверяет, пусто ли список, а когда он НЕ пуст, я хочу добавить значения к этому dataSource и снова назначить его как источник данных в список.

Мне сложно достичь этого, пожалуйста, помогите.

+2

Вы пробовали метод '.Add' класса' Dictionary'? после того, как вы добавите значения в словарь, вам нужно явно переустановить его в нужный список. – Nogard

+0

У меня есть, но где-то я ошибаюсь в синтаксисе и даю мне ошибку, которая «использует непризнанную локальную переменную», но infact следующий код отлично работает в 'else' состоянии
'Словарь datasource;
если (lstbox.items.count> 0) {

// добавьте сюда
}
еще
{
= l2ListText источника данных
.zip (l2ListValue (lText, Lvalue) => новый {lText, Lvalue}) .ToDictionary (x => x.lValue, x => x.lText);} ' – user1889838

+0

Собираетесь ли вы добавить' l2ListValue', если источник данных уже заполнен? – sll

ответ

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(); 
0

Без .Zip расширения LINQ, вы также можете сделать:

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]; 
Смежные вопросы