在 if 条件中声明变量以在 C# 中进行进一步测试

Moh*_*sfy 3 c# if-statement shorthand

我以前在 ac# 教程中看到过它,但我似乎找不到了。

以这段代码为例:

public class Order
{
    public  OrderItem Item { get; set; }
}

public class OrderItem
{
    public string Name { get; set; }
}


public void SomeMethod(object obj)
{
    if(obj is Order && ((Order)obj).Item !=null)
    {
        Console.WriteLine(((Order)obj).Item.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的简写看起来像这样

public void SomeMethod(object obj)
{
    if (myObj = obj is Order && myItem = myObj.Item != null)
    {
        Console.WriteLine(myItem.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法找到正确的语法

Gur*_*ron 5

您正在寻找模式匹配

使用属性模式 (C# 8.0),您可以执行以下操作:

if (obj is Order { Item: { } } order)
{
    Console.WriteLine(order.Item.Name);
}
Run Code Online (Sandbox Code Playgroud)

这将检查它obj是一个Order并且它具有非空Item(通过“空”属性模式),如果两者都结果为 true 将使用类型化变量执行代码块order

或者甚至是下一个:

if (obj is Order { Item: { } item })
{
    Console.WriteLine(item.Name);
}
Run Code Online (Sandbox Code Playgroud)

基本相同,但将使用item变量作为非空项。