编译器抱怨int?无法转换为int. 我来自打字稿背景,这可以工作,因为编译器知道这是row不可能的null。我是否遗漏了某些内容,或者我是否必须显式转换row为intwith int test = (int) row?
int? row = GetRowOfCode(excel, code);
if (row != null)
{
int test = row;
}
Run Code Online (Sandbox Code Playgroud)
在 C# 中,一旦声明变量,它就会保留其声明的类型。
对于引用类型(如 )string,可为 null 的语法仅受编译时属性和推理的支持,因此除了某些编译器提示之外string?实际上与其他类型相同string。如果您使用引用类型,这将允许像您的语法一样的工作。
但对于值类型,例如int,可空类型在运行时实际上是完全不同的类型,因此需要从 an 中提取该值,int?以便将其视为int。您必须使用完全不同的变量来保存强类型int?与int. 这可能看起来像这样:
if (row != null) // or row.HasValue
{
int test = row.Value;
// use `test`
}
Run Code Online (Sandbox Code Playgroud)
使用较新的模式匹配语法,您可以这样做:
if (row is int test)
{
// use `test`
}
Run Code Online (Sandbox Code Playgroud)