用法??在Nullable <int>和string之间

时间:2015-06-04 22:43:41

标签: c# nullable

查看应用时所说的??定义,如果它不为null或右操作数,则返回左操作数。但为什么这不起作用?

int? i = null;
string s = i ?? "some string";

是否要求可空类型匹配正确的操作数类型?

1 个答案:

答案 0 :(得分:7)

??是以下逻辑语句的语法糖(在本例中)。

int? i = null;
string s = null;

if (i != null)
{
    s = i;
}
else 
{
    s = "some string";
} 

显然,编译器永远不会接受这个并且它不会被编译,因为我无法隐式地转换为s。编译器不会为空合并运算符设置异常,并强制执行类型要求。

如果您绝对希望能够在单行中对混合类型使用空合并运算符,则需要通过其他方法执行类型转换。

您不能简单地调用i.ToString(),因为如果i为空,则返回空字符串而不是null,从而导致将空字符串分配给s而不是& #34;一些字符串&#34;。因此,您需要类似以下通用扩展方法的内容:

public static string ToNullableString<T>(this Nullable<T> nullable) where T : struct
{
    return nullable == null ? null : nullable.ToString();
}

可以像这样使用:

int? i = null;
string s = i.ToNullableString() ?? "some string";

s将被赋值为&#34;某些字符串&#34;因为扩展方法会正确保留可空值,允许空合并运算符选择非空替代。