如何将int列表转换为Nullable <int>?</int>列表

时间:2014-01-13 12:19:33

标签: c#

我有一些需要List<int?>并且我有一个List<int>

我可以写:

var items = value.Select(num => (int?) num).ToList();

但这真的是最简单的方法吗?

7 个答案:

答案 0 :(得分:13)

这会有用吗?

var items = value.Cast<int?>().ToList();

答案 1 :(得分:3)

您也可以使用List.ConvertAll

List<int?> items = value.ConvertAll<int?>(i => i);

它甚至可以在.NET 2中运行。除此之外没有任何优势,因此我将继续使用LINQ(Enumerable.Cast,如Tamim Salem所建议的那样),因为它更具可用性和可读性。

但如果你需要一个List<int?>而不是一个List<int>为什么不首先使用一个呢?

答案 2 :(得分:0)

您可以使用:

List<int?> newList = oldList.ConvertAll<int?>(i => i);

虽然它可能与下面的东西差不多相同。

答案 3 :(得分:0)

试试这个

 var result1 = list.ConvertAll<int?>(x => x); 

答案 4 :(得分:0)

List<int> a = new List<int>() { 1, 2, 3, 4 };
List<Nullable<int>> b = new List<int?>();

for (int i = 0; i < a.Count; i++)
{
    b.Add(new Nullable<int>(a[i]));
}

如果你想省略lambdas和投影。

答案 5 :(得分:0)

避免演员阵容和转换

List<int?> nullInts = new List<int?>();
listInts.ForEach(i => nullInts.Add(new int?(i)));

答案 6 :(得分:0)

如果你发现自己做了这么多,你可以用扩展方法实现@ TamimSalem的解决方案:

public static class EnumerableExt
{
    public static List<T?> ToNullableList<T>(this IEnumerable<T> sequence) where T: struct
    {
        return sequence.Cast<T?>().ToList();
    }
}

然后这样称呼:

var items = value.ToNullableList();