使用三元运算符无法确定条件表达式的错误

时间:2013-02-09 06:44:29

标签: c# .net

ternary operator附带以下错误。

  

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

即使我为(int)(result)结果指定了ExecuteScalar,为什么会出现此错误?我们如何纠正它?

CODE

    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. Conditional operator cannot cast implicitly?
  2. Type inference woes, part one - by Eric Lippert

2 个答案:

答案 0 :(得分:3)

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

Win=result==DBNull.Value?(int?)null:(int?)result;

答案 1 :(得分:0)

这是因为Command.ExecuteScalar返回object类型的实例;你可能不会返回一个整数。

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

int.Parse(result.ToString());

OR

int temp = -1;
int.TryParse(result.ToString(), out temp);