2016-07-07 2 views
-1

Следующий код работает отлично:Просто IEnumerable <int> в список <KeyValuePair <int, int>>?

cboDay.DataSource = Enumerable.Range(1, 31).ToDictionary(x => x, x => x).ToList<KeyValuePair<int, int>>(); 
cboDay.ValueMember = "Key"; 
cboDay.DisplayMember = "Value"; 

Но есть лучший способ, чтобы упростить преобразование? (., Например, устранение ToDictionary?)

ответ

2

, что вы можете заменить

Enumerable.Range(1, 31).ToDictionary(x => x, x => x).ToList<KeyValuePair<int, int>>(); 

с

Enumerable.Range(1, 31).Select(x => new KeyValuePair<int, int>(x,x)).ToList(); 
+0

Выдает исключение 'Комплексное DataBinding принимает в качестве источника данных либо IList, либо IListSource' –

+0

@ Ivan-MarkDebono добавил' .ToList() ' – fubo

3

Конечно, просто использовать Select:

cboDay.DataSource = Enumerable.Range(1, 31) 
    .Select(x => new KeyValuePair<int, int>(x, x)) 
    .ToList(); 

Это не ясно, будет ли вам потребность это должно быть List<T>, но это гарантирует, что он будет оцениваться только один раз и может позволить некоторые оптимизации в том, что вы используете.

Нет необходимости создавать Dictionary - и действительно, при этом вы в настоящее время не гарантируете заказ, тогда как указанный код определенно даст вам 1-31 в порядке.