Что-то не так с подходом?
Это странный вопрос, потому что, очевидно, вы уже знаете ответ.Да, это неправильный подход, потому что он потерпит крах во время выполнения.
Оператор Cast<T>
означает, что каждый элемент внешнего списка должен на самом деле быть типа T
, а список не является набором.
Взятьшаг назад.Что у тебя есть?Последовательность последовательностей.Чего ты хочешь?Множество.Что у вас есть в вашем распоряжении, чтобы получить задний план? Метод ToHashSet, который превращает последовательности в наборы .
Думайте об операциях с последовательностями как рабочие процессы .
Sequence of sequences --first step--> SOMETHING --second step--> Set
Работа от начала до конца.Второй шаг - «последовательность превращается в набор».Поэтому «SOMETHING» должно быть «sequence»:
Sequence of sequences -first step-> Sequence -ToHashSet-> Set
Теперь нам нужен шаг, который превращает последовательность последовательностей в последовательность.Вы знаете, как это сделать:
Sequence of sequences --SelectMany--> Sequence --ToHashSet--> Set
И теперь вы можете написать код:
ISet<int> mySet = megalist.SelectMany(x => x).ToHashSet();
И все готово.
Быстрое обновление: Лука отмечает в комментарии, что ToHashSet
доступен не во всех версиях .NET.Если у вас его нет, пишите самостоятельно:
static class MyExtensions
{
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> items)
{
return new HashSet<T>(items);
}
}