C# 使用三元运算符从方法返回可为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

从使用?:运算符的方法返回可为null的类型时遇到一些困难

例如,这项工作:

    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在第二个示例中不会编译。