如何处理 LINQ were 子句中预期为 null 属性的可能性?

问题描述 投票:0回答:1

考虑以下 C# 代码片段:

public class Person
{
    public int Id { get; set;}
    public string? Name { get; set;}
    public string? Description {get; set;}
}


List<Person>? _persons = new List<Person>();

// Something populates the _persons list;

//Use LINQ like this.
Person? person = _persons. Where (person=>person.Name == "someName").FirstOrDefault();

在 LINQ 中,会引发 CS8602 警告,因为 person.Name 有可能为 null。基于 Person 类,这绝对是可能的并且是预期的。 但是,在这种情况下,null 不等于“someName”,因此我不希望名称属性设置为 null 的记录无论如何都不会被返回。

是否有一种语法可以允许查询而不会出现此警告? 我正在使用 .Net 8 和 Visual Studio 2022。

谢谢

c# linq null
1个回答
0
投票

就个人而言,我在使用 LINQ 时总是防止出现空值。你永远不知道你的代码将来会是什么样子,它使它更加健壮。

Person? person = _persons.Where(person => (person.Name ?? "") == "someName").FirstOrDefault();

但是,如果您仍然想忽略 null 警告,可以使用 null-forgiving 运算符“!”

Person? person = _persons.Where(person => person.Name! == "someName").FirstOrDefault();
© www.soinside.com 2019 - 2024. All rights reserved.