查看??它所说的定义,如果它不是null或右操作数,则返回左操作数.但为什么这不起作用?
int? i = null;
string s = i ?? "some string";
Run Code Online (Sandbox Code Playgroud)
是否要求可空类型匹配正确的操作数类型?
?? 对于以下逻辑语句,它是一个语法糖(在本例中).
int? i = null;
string s = null;
if (i != null)
{
s = i;
}
else
{
s = "some string";
}
Run Code Online (Sandbox Code Playgroud)
显然,编译器永远不会接受这个并且它不会编译,因为我无法隐式地转换为s.编译器不会为空合并运算符创建异常,并强制执行类型要求.
如果您绝对希望能够在单行中对混合类型使用空合并运算符,则需要通过其他方法执行类型转换.
您不能简单地调用,i.ToString()因为如果i为null,则返回空字符串而不是null,从而导致将空字符串分配给s"some string".因此,您需要类似以下通用扩展方法的内容:
public static string ToNullableString<T>(this Nullable<T> nullable) where T : struct
{
return nullable == null ? null : nullable.ToString();
}
Run Code Online (Sandbox Code Playgroud)
可以像这样使用:
int? i = null;
string s = i.ToNullableString() ?? "some string";
Run Code Online (Sandbox Code Playgroud)
s 将被赋予值"some string",因为扩展方法将正确保留可空值,允许空合并运算符选择非null替代.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |