2016-01-14 2 views
1

Скажем, у меня есть C# словарь с Enum значений вроде этого:Получить список конкретных значений из C# Словаря

public enum TileType 
{ 
    Source, 
    Horizontal, 
    Vertical 
} 

Dictionary<Tile, TileType> tiles = new Dictionary<Tile, TileType>(); 

... А потом я хочу, чтобы извлечь все пары ключа-значение из Словаря, что например, value = TileType.Horizontal, но без использования петли foreach.

Как получить их без цикла? Я не сомневаюсь, что это возможно с LINQ. Может кто-нибудь дать мне подсказку, как написать LINQ для этого?

ответ

4

Попробуйте это:

var horizontals = tiles.Where(kvp => kvp.Value == TileType.Horizontal).ToList() 
+1

Спасибо! Именно то, что я искал! – BadmintonCat

+2

@BadmintonCat обратите внимание, что это все еще выполняется цикл, это просто не в * вашем * коде ... – AakashM

+1

@AakashM - Который, я думаю, должен быть скрытым в этом вопросе. Другого способа получить значения не существует, даже если вы, наконец, дошли до машинного кода. – Enigmativity

0

Используйте это:

tiles.Where(x => x.Value == TileType.Horizontal); 
0

Его, как это:

var filteredTiles = tiles.Where(x=>x.Value == TileType.Horizontal); 
0

Я хотел бы написать что-то вроде этого:

tiles.Where(t => t.value == TileType.Horizontal).ToArray(); 
0
foreach (var item in tiles.Where(t => t.Value == TileType.Horizontal)) 
{ 
    Console.WriteLine(item.Key); 
} 
Смежные вопросы