“int?” 不包含“TryFormat”的定义

mal*_*lat 1 c# nullable

我很难理解可空值类型在 C#9 中的工作原理。

以下文档来自:

我可以写(没有编译器错误):

int? a = 10;
a++; // No need for explicit 'a.Value'
Run Code Online (Sandbox Code Playgroud)

但我不能写(编译器错误):

Span<char> TryFormatOrNull(int? input)
{
    char[] buffer = new char[512];
    if (input == null) return null;
    _ = input.TryFormat(buffer, out _);
    return buffer;
}
Run Code Online (Sandbox Code Playgroud)

我需要写(没有语法糖):

Span<char> TryFormatOrNull(int? input)
{
    char[] buffer = new char[512];
    if (input == null) return null;
    _ = input.Value.TryFormat(buffer, out _);
    return buffer;
}
Run Code Online (Sandbox Code Playgroud)

我对可空值类型与成员函数/运算符有何误解?

Jon*_*eet 6

我对可空值类型与成员函数/运算符有何误解?

运算符会自动“提升”(即,不可空值类型的运算符自动可用于相应的可为空值类型),但方法则不然。仅此而已,真的。

有关提升运算符的详细信息,请参阅C# 标准的第 12.4.8 节,有关提升转换的详细信息,请参阅11.6.2

  • @malat如果这样工作,`someNullableInt.GetType()`会返回`Nullable&lt;int&gt;`或`int`吗? (2认同)