2010-05-13 1 views
2

У меня есть System.Collections.Generic.Dictionary<string, string>, содержащий идентификатор элемента управления и соответствующий столбец данных для привязки данных:словарь <строка, строка> в словарь <Control, объект> используя IEnumerable <T> .Select()

var dic = new Dictionary<string, string> 
{ 
    { "Label1", "FooCount" }, 
    { "Label2", "BarCount" } 
}; 

Я использую его таким образом :

protected void FormView1_DataBound(object sender, EventArgs e) 
{ 
    var row = ((DataRowView)FormView1.DataItem).Row; 
    Dictionary<Control, object> newOne = dic.ToDictionary(
     k => FormView1.FindControl(k.Key)), 
     k => row[k.Value]); 
} 

Так что я использую IEnumerable<T>.ToDictionary(Func<T>, Func<T>).

Возможно ли это с использованием IEnumerable<T>.Select(Func<T>)?

ответ

2

Конечно, но возвращаемое значение будет IEnumerable<KeyValuePair<Control, object>>, а не Dictionary<Control, object>:

IEnumerable<KeyValuePair<Control, object>> newOne = dic.Select(
    k => new KeyValuePair<Control, object>(FormView1.FindControl(k.Key), 
              row[k.Value])); 

(непроверенные)

+0

Я не могу понять, как сделать это точно? Что 'Func ' может это сделать? – abatishchev

+0

@abatishchev: Обновлен мой ответ. – Heinzi