我有一个Collection<Lookup<int>>
类型的集合,我想将其值转换为Collection\Lookup<int?>>.
最好的方法是什么?
谢谢
答案 0 :(得分:4)
好吧,Lookup是一个键控IEnumebles的集合;基本上是只读的Dictionary<TKey, IEnumerable<TValue>>
。 Lookup<int>
是荒谬的。
解决这个问题的最佳方法可能是将Lookups中的每个项目“解组”为具有可空值的匿名键值对,然后重新对项目进行分组。
示例:
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 :(得分:2)
System.Collection.ObjectModel.Collection<T>
与IEnumerable<T>
相关,您应该可以使用Select
扩展方法。
有些事情:
var listOfNullables = lookupsAsInt.Select(l => new Lookup<Int?>(l.Value)).ToList();
您需要在类文件中加入using System.Linq;
。
答案 2 :(得分:1)
假设Lookup<T>
有一个构造函数,它带有一些值T
和一个名为Value的属性,它返回有问题的T ....
var lookupsAsNullableInt = lookupsAsInt.Select(l => new Lookup<Int?>(l.Value)).ToList();
问题是,您需要知道如何从单个Lookup<int?>
构建一个新的Lookup<int>
。然后,上面的代码将一个枚举转换为另一个的List。
答案 3 :(得分: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);