2010-03-03 4 views
2

Я довольно новичок в C# и совершенно новый для LINQ.LINQ от SortedList C#

У меня есть существующий объект типа SortedList, который я хотел бы фильтровать с помощью LINQ. Однако у меня возникают проблемы с этим, по-видимому, поскольку тип SortedList не является общим.

В течение времени я прокрутил весь список SortedList и вручную добавил объекты в список и использовал LINQ для фильтрации оттуда. Впрочем, это мне кажется, ну, мусор.

Есть ли лучший способ конвертировать мой отсортированный список в список <> (Я не беспокоюсь о сохранении ключа)? Или действительно, чтобы преобразовать мой SortedList в SortedList <> возможно?

+0

Некоторые примеры кода и данных? – amelvin

+0

Нужно ли фильтровать на SortedList.Keys? – si618

ответ

3

Класс Original SortedList является частью коллекции. Generics вводит SortedList, но если у вас есть старый код, тогда он не будет использовать это.

Проще всего использовать метод Cast или метод расширения OfType, который предоставляется для SortedList. Эти методы предоставят вам список IEnumerable, в котором вы можете применить общие операции Linq. Убедитесь, что Вы using System.Linq; в начале, то вы должны быть в состоянии сделать, как показано ниже:

sortedList.Cast<int>().Where(i=>i > 5); 
sortedList.OfType<Car>().Where(c=> c.Color == Color.Blue); 
+0

Я не верю, что DictionaryEntry можно отличить до int; вам нужно будет указать либо клавиши, либо значения. – si618

+0

Вышеприведенное является лишь примером, вы можете наложить его на все, что считается подходящим. В приведенном выше примере показано, что коллекция SortedList представляет собой IEnumerable (или что вам нравится, заменив int на ваш тип), и, конечно, кастинг завершится неудачно, если тип не совпадает. Спецификация метода - Cast , где T - параметризованный тип –

0

Если вам не нужно фильтровать с помощью клавиш, просто отбрасывать и фильтр на Values ​​

SortedList sl = new SortedList(); 
sl.Add("foo", "baa"); 
var baas = sl.Values.Cast<string>().Where(s => s == "baa"); 
0

Что около

normalList = sortedList.Items; 

Это дает вам список, который вы хотите?

0

Чтобы ответить на вопрос "Есть ли лучший способ конвертировать мой отсортированный список в список <> (Я не беспокоюсь о сохранении ключа)?" ... Вот пример, с последней строкой в ​​качестве ответа, в результате в списке с целыми числами 4, 1, 3, 2:

SortedList<string,int> sortedList = new SortedList<string,int>(); 
sortedList.Add("One", 1); 
sortedList.Add("Two", 2); 
sortedList.Add("Three", 3); 
sortedList.Add("Four", 4); 
List<int> list = sortedList.Values.ToList(); 
Смежные вопросы