此开关和外壳标签中括号的用途是什么?
What is the purpose of the parenthesis in this switch and case label?
我正在为项目服务编写一个函数,如果用户请求某个名称下的所有项目,它将 return 全部。例如所有 iPhone X 等
的手机
我得到了帮助,使其中一个功能正常工作,如果有超过 1 个项目,它将 return 所有(这是第三种情况):
var itemsList = items.ToList();
switch (itemsList.Count())
{
case 0:
throw new Exception("No items with that model");
case 1:
return itemsList;
case { } n when n > 1:
return itemsList;
}
return null;
令我困惑的是 { }
是做什么用的?有人告诉我这是 "a holding place as sub for stating the type" 我不确定他们的意思。
它是如何工作的?我不确定 n
的用途。
非常感谢任何帮助!
进展:在跟进帮助者之后,我现在知道 { }
与 var
相似。但我仍然不确定为什么它只用在这里。
显示{ }
用法的是pattern matching that was introduced in C# 8
. { }
matches any non-null value. n
is used to declare a variable that will hold matched value. Here is a sample from MSDN的能力。
样本说明:
switch (itemsList.Count())
{
case 0:
throw new Exception("No items with that model");
case 1:
return itemsList;
// If itemsList.Count() != 0 && itemsList.Count() != 1 then it will
// be checked against this case statement.
// Because itemsList.Count() is a non-null value, then its value will
// be assigned to n and then a condition agaist n will be checked.
// If condition aginst n returns true, then this case statement is
// considered satisfied and its body will be executed.
case { } n when n > 1:
return itemsList;
}
它被称为property pattern
。 {}
处理剩余的 nonnull 对象。 属性 模式表示 属性 需要具有特定的常量值。但是,在您的示例中,我认为只是通过确保 n
不为空来在 switch 表达式中使用 n
。我的意思是它的等价物如下。
if (itemsList is {} n && n.Count() > 1)
{
return itemsList;
}
我正在为项目服务编写一个函数,如果用户请求某个名称下的所有项目,它将 return 全部。例如所有 iPhone X 等
的手机我得到了帮助,使其中一个功能正常工作,如果有超过 1 个项目,它将 return 所有(这是第三种情况):
var itemsList = items.ToList();
switch (itemsList.Count())
{
case 0:
throw new Exception("No items with that model");
case 1:
return itemsList;
case { } n when n > 1:
return itemsList;
}
return null;
令我困惑的是 { }
是做什么用的?有人告诉我这是 "a holding place as sub for stating the type" 我不确定他们的意思。
它是如何工作的?我不确定 n
的用途。
非常感谢任何帮助!
进展:在跟进帮助者之后,我现在知道 { }
与 var
相似。但我仍然不确定为什么它只用在这里。
显示{ }
用法的是pattern matching that was introduced in C# 8
. { }
matches any non-null value. n
is used to declare a variable that will hold matched value. Here is a sample from MSDN的能力。
样本说明:
switch (itemsList.Count())
{
case 0:
throw new Exception("No items with that model");
case 1:
return itemsList;
// If itemsList.Count() != 0 && itemsList.Count() != 1 then it will
// be checked against this case statement.
// Because itemsList.Count() is a non-null value, then its value will
// be assigned to n and then a condition agaist n will be checked.
// If condition aginst n returns true, then this case statement is
// considered satisfied and its body will be executed.
case { } n when n > 1:
return itemsList;
}
它被称为property pattern
。 {}
处理剩余的 nonnull 对象。 属性 模式表示 属性 需要具有特定的常量值。但是,在您的示例中,我认为只是通过确保 n
不为空来在 switch 表达式中使用 n
。我的意思是它的等价物如下。
if (itemsList is {} n && n.Count() > 1)
{
return itemsList;
}