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();
这将自动执行空检查,尽管语法正在尝试使用代码。一个很好的语法糖,压缩了代码并且仍然相当有表现力。
我想获取可枚举的第一个实例,然后在找到的实例存在时对其执行一些操作 (!= 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();
这将自动执行空检查,尽管语法正在尝试使用代码。一个很好的语法糖,压缩了代码并且仍然相当有表现力。