gpt4 book ai didi

c# - 对 throw 表达式的说明

转载 作者:行者123 更新时间:2023-11-30 14:24:12 25 4
gpt4 key购买 nike

我正在阅读关于“抛出表达式”的部分 here .

它提到您现在可以在“...条件表达式、空合并表达式和一些 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();
}

最佳答案

是的,你的理解是正确的。在 C# 7 中,您可以在这些以前不能使用的地方使用 throw:

  • 条件表达式(三元或 ?: 运算符)
  • 空合并表达式(?? 运算符)
  • Lambda 表达式,例如 expression-bodied 成员

如您链接到的文章中所述,throw 一直是 C# 中的语句(不是表达式),这意味着您不能像这样使用它:

var theValue = myNullable.HasValue
? myNullable.Value
: throw new ArgumentNullException();

相反,您需要拆分赋值语句:

var theValue = myNullable.HasValue ? myNullable.Value : null;
if (theValue == null) throw new ArgumentNullException();

当然,这是一个愚蠢的例子,但它展示了有时能够像条件运算符一样抛出内部结构是多么有用。

throw 表达式的两个新用途的一个很好的例子是表达式主体 set 访问器:

public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException();
}

关于c# - 对 throw 表达式的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41991770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com