gpt4 book ai didi

c# - 即使没有空值,为什么会发出有关可为空类型的警告?

转载 作者:行者123 更新时间:2023-12-03 07:59:36 26 4
gpt4 key购买 nike

为什么我在 list2 行中收到警告?我在这里过滤掉了所有空值。该警告指出,在 select 方法中,可能会取消引用 null 值。

#nullable enable

using System.Collections.Generic;
using System.Linq;

namespace TestNamespace
{
public class Test
{
public Test()
{
List<string?> testList = new List<string?>()
{
"hallo",
null
};

IEnumerable<string> list2 = testList.Where(x => x != null).Select(x => x.Replace("A", "")); // warning
IEnumerable<string> list3 = testList.Where(x => x != null).Select(x => x != null ? x.Replace("A", "") : ""); // no warning
}
}
}

这是我在 list2 行中收到的警告: Warning about nullable type

在 list3 行中,不会发出警告,但 Select-Statement 中的检查始终毫无意义。

最佳答案

您会收到警告,因为可枚举中的类型仍然可为空 string? .

我想另一个线程可能会更改 hallo进入null在枚举期间,但更有可能的是编译器不够复杂,无法理解您已经过滤掉了任何可能的 null提前值。

您可以使用.Cast<string>()过滤掉 null 后值来更改枚举中的类型,或者您可以使用 null-forgiving operator删除警告。


为了好玩,我还写了这个:

public static IEnumerable<T> WhereNotNull<T>(this IEnumerable<T?> items)
{
foreach(var item in items)
{
if (item is object)
{
yield return item;
}
}
}

在这里查看它的工作原理:

https://dotnetfiddle.net/F8iQ0I

关于c# - 即使没有空值,为什么会发出有关可为空类型的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74826407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com