gpt4 book ai didi

c# - 可空引用类型 - 接受参数的返回类型可空性

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

我有一个方法 Foo,它接受一个字符串。如果字符串为 null,它会做一些事情;如果不是,它会做一些其他事情(null 是一个有效值)。然后返回相同的字符串。

这是在 C# 8.0 中禁用的可空引用类型的 Foo:

string Foo(string s)
{
// Do something with s.
return s;
}

void Bar()
{
string s = "S";
string s2 = Foo(s);

string n = null;
string n2 = Foo(n);
}

在我启用可空引用类型后,string n = null 给出警告。这是有道理的,因为 string 不再可以为 null。我将其类型转换为 string?:

void Bar()
{
string s = "S";
string s2 = Foo(s);

string? n = null; // X
string? n2 = Foo(n);
}

现在 Foo(n) 警告我 Foo 不喜欢可为 null 的字符串。这也是有道理的——Foo 应该接受可为空的字符串,因为它同时支持空值和非空值。我更改了它的参数,因此将类型返回到 string?:

string? Foo(string? s)
{
// Do something with s.
return s;
}

这次是 string s2 = Foo(s),提示 Foo 返回一个 string? 而我试图将它分配给一个 string.

有没有办法让流分析理解这样一个事实,即当我向 Foo 提供 string(而不是 string?)时,然后它返回值不能为空?

最佳答案

当参数 s 不为 null 时,这可能会使返回值不为 null。

// using System.Diagnostics.CodeAnalysis;

[return: NotNullIfNotNull("s")]
string? Foo(string? s)
{
// Do something with s.
return s;
}

关于c# - 可空引用类型 - 接受参数的返回类型可空性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54082751/

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