解决方案 »

  1.   

    3元运算符,语义比较复杂他需要配合后两项判定,起码后两是可以相互隐式转换的类型,具体规则你可以度娘(无奈,google最近貌似又被封了)因为规则复杂,所以通常我们还是手动在代码里明确使用相同类型东西,免得搞不清状况!string.IsNullOrEmpty(s) ?(int?) Convert.ToInt32(s) : null;  可以
      

  2.   

    三元表达式,:两边类型必须一致
    i = !string.IsNullOrEmpty(s) ? (int?)Convert.ToInt32(s) : null;
    这样类型就一致了~i = !string.IsNullOrEmpty(s) ? Convert.ToInt32(s) :Convert.ToInt32(null);当然这个类型也一致了
      

  3.   

    i = !string.IsNullOrEmpty(s) ? Convert.ToInt32(s) : default(int?);
    试试看。