Cast Collection Value Type

时间:2012-02-07 02:01:51

标签: c#

我有一个Collection<Lookup<int>>类型的集合,我想将其值转换为Collection\Lookup<int?>>.最好的方法是什么?

谢谢

4 个答案:

答案 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);