У меня есть коллекция типа Collection<Lookup<int>>
, и я хотел бы преобразовать ее значения в Collection\Lookup<int?>>.
. Каков наилучший способ для этого?Cast Collection Value Тип
Спасибо
У меня есть коллекция типа Collection<Lookup<int>>
, и я хотел бы преобразовать ее значения в Collection\Lookup<int?>>.
. Каков наилучший способ для этого?Cast Collection Value Тип
Спасибо
System.Collection.ObjectModel.Collection<T>
связан с IEnumerable<T>
, вы должны уметь использовать способ расширения Select
.
Что-то вдоль линий:
var listOfNullables = lookupsAsInt.Select(l => new Lookup<Int?>(l.Value)).ToList();
Вам необходимо включить using System.Linq;
в файле класса.
Я не включал 'using System.Linq;' Добавляя это, все изменилось. – rghazarian
Это не будет работать для преобразования коллекции
@BrentAnderson - Не стесняйтесь. Единственное значение, которое ОП выбрала из этого ответа, заключалось в том, что им нужно было включить инструкцию using в System.Linq. * Ответ * часть ответа - последняя строка. Я обновлю его, чтобы отразить правильный ответ –
Ну, Lookup представляет собой набор шпоночных IEnumerables; в основном только для чтения Dictionary<TKey, IEnumerable<TValue>>
. A Lookup<int>
является бессмысленным.
Возможно, наилучшим способом решения этой проблемы было бы «де-группировать» каждый элемент из поисковых систем в анонимную пару «ключ-значение» с нулевым значением, а затем перегруппировать элементы.
Пример:
var myCollectionOfNullableInts =
(from g in MyCollectionOfIntLookups
from v in g.Values
select new {g.Key, Value = (int?)v}
into l
group l by l.Key into g2
select g2).ToList();
Полученная коллекция должна быть List<Lookup<[your key type], int?>>
.
Ударь мне. +1 – Gabe
Коллекция имеет тип System.Collections.ObjectModel и по какой-либо причине ни один из методов Linq (методы расширения) не появляется в intellisense. Я почесываю голову. Я попытаюсь перезапустить VS. Благодарю. – rghazarian
Как указывает ваш отмеченный ответ, убедитесь, что вы ссылаетесь на пространство имен System.Linq. – KeithS
Lookup<T>
Предполагая, что имеет конструктор, который принимает некоторое значение T
и свойство называется Value, которое возвращает T в вопрос ....
var lookupsAsNullableInt = lookupsAsInt.Select(l => new Lookup<Int?>(l.Value)).ToList();
Дело в том, что ты должен знать, как построить один новый Lookup<int?>
из одного Lookup<int>
. Затем приведенный выше код выполняет работу по преобразованию перечисления одного в список другого.
Я думаю, что вам не хватает?. В противном случае правильная проекция из одного типа в другой. – kodefuguru
Правильно, если бы он был назад. Спасибо Крису. –
Предполагая членов A, B, C, это преобразует исходную коллекцию в новую Collection<Lookup<int?>>
и проверит первое значение.
var nowNullable = new Collection<Lookup<int?>>(lookup.Select(l => new Lookup<int?> {A = (int?) l.A, B = l.B, C = l.C}).ToArray());
nowNullable.First().A = null;
Console.WriteLine(nowNullable.First().A.HasValue);
О каком поиске вы говорите? Тот, который я знаю о (http://msdn.microsoft.com/en-us/library/bb460184.aspx), принимает два параметра типа, а не один. –
Это собственный класс Lookup. – rghazarian
Можете ли вы опубликовать код для класса? –