2012-03-01 2 views
3

Я хочу что-то сделать с каждым объектом в словаре C#. keyVal.Value кажется немного неудобно:Loop over Items в C# Dictionary

foreach (KeyValuePair<int, Customer> keyVal in customers) { 
    DoSomething(keyVal.Value); 
} 

Есть ли лучше способ сделать это, что также быстро?

+2

ли вы * просто * хотите значения? Если это так, используйте 'customers.Values'. – Gabe

ответ

5

Dictionary класс имеет Values свойство, которое можно непосредственно итерацию через:

foreach(var cust in customer.Values) 
{ 
    DoSomething(cust); 
} 

Альтернативой, если вы можете использовать LINQ, как Арье ван Someren показывает в his answer:

customers.Values.Select(cust => DoSomething(cust)); 

или:

customers.Select(cust => DoSomething(cust.Value)); 
+0

Вам нужно '.Value' в вашем linq. 'cust' имеет тип' KeyValuePair 'в этом контексте –

+0

@KyleTrauberman - Спасибо за исправление. Я добавил еще одну альтернативу. – Oded

1

Если все, что вам нужно, это значения, а не клавиши, вы можете использовать IDictionary.Values для перебора.

foreach (Customer val in customers.Values) { 
    DoSomething(val); 
} 
3

Вы всегда можете перебирать ключи и получать значения. Или вы можете перебирать только значения.

foreach(var key in customers.Keys) 
{ 
    DoSomething(customers[key]); 
} 

или

foreach(var customer in customer.Values) 
{ 
    DoSomething(customer); 
} 
3
customers.Select(customer => DoSomething(customer.Value)); 
+0

Это предполагает, что 'DoSomething' возвращает значение. –