0

出现以下错误ternary operator

错误:无法确定条件表达式的类型,因为 '' 和 'int' 之间没有隐式转换

即使我已指定结果,为什么还会出现此(int)(result)错误ExecuteScalar?我们怎样才能纠正它?

代码

    public int? GetWINFromAssociateID(int associateID)
    {
        int? WIN =null;
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            string commandText = DataLayerConstants.GetWINFromAssociateIDCommand;
            using (SqlCommand command = new SqlCommand(commandText, connection))
            {
                command.CommandType = System.Data.CommandType.Text;
                command.Parameters.AddWithValue("@payroll_svc_assoc_id", associateID);

                var result = command.ExecuteScalar();
                WIN = result == DBNull.Value ? null : (int)(result);
            }
        }
        return WIN;
    }

更新的参考文献

  1. 条件运算符不能隐式转换?
  2. 类型推理的麻烦,第一部分 - Eric Lippert
4

2 回答 2

3

您应该将三元运算符中的 null 转换为 int?:

Win=result==DBNull.Value?(int?)null:(int?)result;
于 2013-02-09T06:51:06.233 回答
0

这是因为有Command.ExecuteScalar返回类型的实例object;而且您可能不会返回整数。

您需要使用int.Parse或更好的 int.TryParse;

int.Parse(result.ToString());

或者

int temp = -1;
int.TryParse(result.ToString(), out temp);
于 2013-02-09T07:42:51.833 回答