C# 使用三元运算符从方法返回可为null的值
从使用?:运算符的方法返回可为null的类型时遇到一些困难 例如,这项工作:C# 使用三元运算符从方法返回可为null的值,c#,nullable,C#,Nullable,从使用?:运算符的方法返回可为null的类型时遇到一些困难 例如,这项工作: public static Int32? RunInt32Query(string query, KeyValueCollection parameters) { object scalar = RunScalarQuery(query, parameters); if (scalar != null) { return Conv
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;
在 编译器知道目标类型是
Int32?
(基于方法声明),因此可以基于隐式转换自动转换表达式convert.ToInt32(标量)
的结果
使用条件运算符,编译器首先尝试确定表达式(scalar!=null)的类型?Convert.ToInt32(标量):null
。为此,它计算两个结果表达式的类型,Convert.ToInt32(标量)
和null
。这些类型分别是Int32
和Object
。编译器不清楚这两个表达式是否都可以转换为Int32?
尝试以下操作:
return (scalar != null) ? (Int32?)Convert.ToInt32(scalar) : null;
在 编译器知道目标类型是
Int32?
(基于方法声明),因此可以基于隐式转换自动转换表达式convert.ToInt32(标量)
的结果
使用条件运算符,编译器首先尝试确定表达式
(scalar!=null)的类型?Convert.ToInt32(标量):null
。为此,它计算两个结果表达式的类型,Convert.ToInt32(标量)
和null
。这些类型分别是Int32
和Object
。编译器不清楚这两个表达式是否都可以转换为Int32?
您所说的不起作用
@unlucky在第二个示例中不会编译。您所说的不起作用
@unlucky在第二个示例中不会编译。