C# 中是否存在与 Swift“guard let”语句等效的语义?

ARG*_*Geo 0 c# swift

在 Swift 中,有一个用于可选绑定的Guard let语句:

\n
var opt: Int? = 5\n// var opt: Int? = nil\n\nguard let nonOptional: Int = opt else { return }\n
Run Code Online (Sandbox Code Playgroud)\n

guard let语句允许我们提取Int存在的值(在下面的示例中为),并且如果 option 等于5则不提取值(因为如果它等于\xe2\x80\x93 ,应用程序将崩溃)。nilnilnil

\n

我想知道 C# 中的语义等效项是什么?

\n

Min*_*ipe 5

目前还没有。C# GitHub 存储库上有一个开放提案(自 2017 年 2 月起)。

C# 的做法类似于

var optional = (int?) 5;

...

int nonOptional;
if (optional.HasValue)
    nonOptional = optional.Value;
else
    return;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它非常冗长,但那是因为我们处理的是Nullable值类型而不是引用类型。对于引用类型,它变得更加容易和简洁:

var optional = (string) null;

...

if (optional == null)
    return;

// We known from now on that 'optional' is not null
Run Code Online (Sandbox Code Playgroud)