2012-02-07 3 views
3

У меня есть коллекция типа Collection<Lookup<int>>, и я хотел бы преобразовать ее значения в Collection\Lookup<int?>>.. Каков наилучший способ для этого?Cast Collection Value Тип

Спасибо

+0

О каком поиске вы говорите? Тот, который я знаю о (http://msdn.microsoft.com/en-us/library/bb460184.aspx), принимает два параметра типа, а не один. –

+0

Это собственный класс Lookup. – rghazarian

+0

Можете ли вы опубликовать код для класса? –

ответ

2

System.Collection.ObjectModel.Collection<T> связан с IEnumerable<T>, вы должны уметь использовать способ расширения Select.

Что-то вдоль линий:

var listOfNullables = lookupsAsInt.Select(l => new Lookup<Int?>(l.Value)).ToList(); 

Вам необходимо включить using System.Linq; в файле класса.

+0

Я не включал 'using System.Linq;' Добавляя это, все изменилось. – rghazarian

+0

Это не будет работать для преобразования коллекции > в список >. –

+0

@BrentAnderson - Не стесняйтесь. Единственное значение, которое ОП выбрала из этого ответа, заключалось в том, что им нужно было включить инструкцию using в System.Linq. * Ответ * часть ответа - последняя строка. Я обновлю его, чтобы отразить правильный ответ –

4

Ну, 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?>>.

+0

Ударь мне. +1 – Gabe

+0

Коллекция имеет тип System.Collections.ObjectModel и по какой-либо причине ни один из методов Linq (методы расширения) не появляется в intellisense. Я почесываю голову. Я попытаюсь перезапустить VS. Благодарю. – rghazarian

+0

Как указывает ваш отмеченный ответ, убедитесь, что вы ссылаетесь на пространство имен System.Linq. – KeithS

1

Lookup<T> Предполагая, что имеет конструктор, который принимает некоторое значение Tи свойство называется Value, которое возвращает T в вопрос ....

var lookupsAsNullableInt = lookupsAsInt.Select(l => new Lookup<Int?>(l.Value)).ToList(); 

Дело в том, что ты должен знать, как построить один новый Lookup<int?> из одного Lookup<int>. Затем приведенный выше код выполняет работу по преобразованию перечисления одного в список другого.

+0

Я думаю, что вам не хватает?. В противном случае правильная проекция из одного типа в другой. – kodefuguru

+0

Правильно, если бы он был назад. Спасибо Крису. –

1

Предполагая членов 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); 
Смежные вопросы