使用三元运算符从方法返回可空值
Returning nullable values from a method using terniary operator
我在使用 ?: 运算符从方法返回可空类型时遇到一些困难。
例如,这个有效:
public static Int32? RunInt32Query(string query, KeyValueCollection parameters)
{
object scalar = RunScalarQuery(query, parameters);
if (scalar != null)
{
return Convert.ToInt32(scalar);
}
else
{
return null;
}
}
但是这个例子不起作用,它不会编译:
public static Int32? RunInt32Query(string query, KeyValueCollection parameters)
{
object scalar = RunScalarQuery(query, parameters);
return (scalar != null) ? Convert.ToInt32(scalar) : null;
}
据我了解,这两种方法在高层次上实际上做的是同一件事,但显然不是?
试试这个:
return (scalar != null) ? (Int32?)Convert.ToInt32(scalar) : null;
在
return Convert.ToInt32(scalar);
编译器知道目标类型是 Int32?
(根据方法声明),因此可以根据隐式转换自动转换表达式 Convert.ToInt32(scalar)
的结果。
使用条件运算符,编译器首先尝试确定表达式的类型(scalar != null) ? Convert.ToInt32(scalar) : null
。为此,它评估两个结果表达式 Convert.ToInt32(scalar)
和 null
的类型。这些类型分别是 Int32
和 Object
。对于编译器来说,这两个表达式都可以转换为 Int32?
.
并不明显
我在使用 ?: 运算符从方法返回可空类型时遇到一些困难。
例如,这个有效:
public static Int32? RunInt32Query(string query, KeyValueCollection parameters)
{
object scalar = RunScalarQuery(query, parameters);
if (scalar != null)
{
return Convert.ToInt32(scalar);
}
else
{
return null;
}
}
但是这个例子不起作用,它不会编译:
public static Int32? RunInt32Query(string query, KeyValueCollection parameters)
{
object scalar = RunScalarQuery(query, parameters);
return (scalar != null) ? Convert.ToInt32(scalar) : null;
}
据我了解,这两种方法在高层次上实际上做的是同一件事,但显然不是?
试试这个:
return (scalar != null) ? (Int32?)Convert.ToInt32(scalar) : null;
在
return Convert.ToInt32(scalar);
编译器知道目标类型是 Int32?
(根据方法声明),因此可以根据隐式转换自动转换表达式 Convert.ToInt32(scalar)
的结果。
使用条件运算符,编译器首先尝试确定表达式的类型(scalar != null) ? Convert.ToInt32(scalar) : null
。为此,它评估两个结果表达式 Convert.ToInt32(scalar)
和 null
的类型。这些类型分别是 Int32
和 Object
。对于编译器来说,这两个表达式都可以转换为 Int32?
.