Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将int列表转换为可为null的列表<;int>;?_C# - Fatal编程技术网

C# 如何将int列表转换为可为null的列表<;int>;?

C# 如何将int列表转换为可为null的列表<;int>;?,c#,C#,我有一些东西需要列表,我有一个列表 我可以写: var items = value.Select(num => (int?) num).ToList(); 但这真的是最简单的方法吗?您也可以使用 List items=value.ConvertAll(i=>i); 它甚至可以在.NET2中运行。除此之外,没有任何优势,因此我将继续使用LINQ(Enumerable.Cast,正如Tamim Salem所建议的那样),因为它更容易使用和阅读 但是如果你需要一个列表而不是列表为什么不首先使

我有一些东西需要
列表
,我有一个
列表

我可以写:

var items = value.Select(num => (int?) num).ToList();
但这真的是最简单的方法吗?

您也可以使用

List items=value.ConvertAll(i=>i);
它甚至可以在.NET2中运行。除此之外,没有任何优势,因此我将继续使用LINQ(
Enumerable.Cast
,正如Tamim Salem所建议的那样),因为它更容易使用和阅读

但是如果你需要一个
列表
而不是
列表
为什么不首先使用一个呢?

你可以使用:

List<int?> newList = oldList.ConvertAll<int?>(i => i);
List newList=oldList.ConvertAll(i=>i);
尽管它下面可能也有同样的功能。

试试这个

 var result1 = list.ConvertAll<int?>(x => x); 
var result1=list.ConvertAll(x=>x);
这样行吗

var items = value.Cast<int?>().ToList();
var items=value.Cast().ToList();
List a=newlist(){1,2,3,4};
列表b=新列表();
for(int i=0;i

如果您想省略lambda和投影。

避免强制转换和转换

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

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

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

在你的问题中写上Nullable可能会更好,因为它让人困惑。似乎很简单,我不会做得更好。我相信会的。这就是我要做的,将列表转换为列表供您参考:这比在页面上更适合代码审查,因此唯一最简单的解决方案是不进行转换。任何其他解决方案本质上都做相同的事情,例如ConvertAll、Cast/ToList、Select/ToList all枚举原始列表并创建一个新列表。这怎么简单?7行而不是1行?亲爱的先生,如果你认为简单性是用代码行来衡量的,那么你就是个白痴。让我用一行代码向您展示一些简单性-int count=Enumerable.Range(0500).AsParallel().Select(x=>new{Id=x}).Where(x=>{if(x.Id%2==0 | | x.Id%5==0)返回true;返回false;}).count(x=>x.Id<200);请让我知道,如果出现问题,您将如何调试它。这是一个简单的例子,想象一下生产代码中的情况;它更简单吗?我认为不是。你如何避免在这里进行强制转换和转换?转换运算符的作用实际上与您的代码完全相同-创建一个新的可空实例,其中包含不可空值Just ildasm your code和mine,并查看差异,例如在ildasm代码中查找转换器。这与原始代码相同,可能导致相同的ILcode@PanagiotisKanavos:
Select
需要另一个
实例,其中selectEnumerableIterator
Cast
只循环并返回
yield return(TResult)((对象)current)。因此,
Enumerable.Cast
可能更有效一些。
List<int?> nullInts = new List<int?>();
listInts.ForEach(i => nullInts.Add(new int?(i)));
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();