我正在阅读这里关于"投掷表达"的部分.
它提到你现在可以在"......条件表达式,空合并表达式和一些lambda表达式"中使用它们.
但他们没有为每个人提供明确的例子,除了他们称之为有条件的,但我认为它是无效的.无论如何,我想为每三个人提供一个例子.
这些(在我的注释中)是否正确命名了条件表达式,空合并表达式和lambda表达式的throw表达式示例?或者我错误地标记/混淆了什么?
public class Person
{
public string Name { get; }
// null coalescing expression.
public Person(string name) => Name = name ?? throw new ArgumentNullException(name);
// conditional expressions
public string GetFirstName()
{
var parts = Name.Split(new string[] { " " }, StringSplitOptions.None);
return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException("No name!");
}
// Lambda
public string GetLastName() => throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
是的,你的理解是正确的.在C#7中,您可以throw在以下之前使用这些地方:
?:运算符)??运算符)正如你链接到的文章中所描述的那样,throw一直是C#中的一个语句(不是表达式),这意味着你不能像以下那样使用它:
var theValue = myNullable.HasValue
? myNullable.Value
: throw new ArgumentNullException();
Run Code Online (Sandbox Code Playgroud)
相反,您需要拆分赋值语句:
var theValue = myNullable.HasValue ? myNullable.Value : null;
if (theValue == null) throw new ArgumentNullException();
Run Code Online (Sandbox Code Playgroud)
当然,这是一个愚蠢的例子,但它演示了如何能够像条件运算符一样抛出内部结构.
包含throw表达式的两个新用法的一个很好的例子是表达式的set访问器:
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |