C#7 模式匹配值不为空

C#7 Pattern Matching value Is Not Null

我想获取可枚举的第一个实例,然后在找到的实例存在时对其执行一些操作 (!= null)。有没有一种方法可以使用 C#7 模式匹配来简化该访问?

采取以下起点:

IEnumerable<Client> clients; /// = new List<Client> {new Client()};
Client myClient = clients.FirstOrDefault();
if (myClient != null)
{
    // do something with myClient
}

我可以像这样将对 FirstOrDefault 的调用与 if statement 的调用结合起来吗:

if (clients.FirstOrDefault() is null myClient)
{
    // do something with myClient
}

我在 MSDN Pattern Matching or

上没有看到任何类似的例子

你绝对可以做到。我的示例使用 string 但它与 Client.

的工作方式相同
void Main()
{
    IList<string> list = new List<string>();

    if (list.FirstOrDefault() is string s1) 
    {
        Console.WriteLine("This won't print as the result is null, " +
                          "which doesn't match string");
    }

    list.Add("Hi!");

    if (list.FirstOrDefault() is string s2)
    {
        Console.WriteLine("This will print as the result is a string: " + s2);
    }
}

您可以使用以下空值传播方法作为 RB 答案的替代方法。

var client = clients.FirstOrDefault();
var implement = client?.PerformImplementation();

这将自动执行空检查,尽管语法正在尝试使用代码。一个很好的语法糖,压缩了代码并且仍然相当有表现力。