Прерывание Resharper “Преобразовывает в оператор 'возврата'”

проверь свой код; эта строка вставки:

$sql = "INSERT INTO projectData(customerName, carName, appointmentDate, email, issueDescribe)
VALUES ('$cuName', '$caName', '$appDate', '$ema', '$isDescribe', '$tiJob')"; 

имеют 5 столбцов в структуре:

customerName, carName, appointmentDate, email, issueDescribe

И вы отправляете 6 переменных для заполнения таблицы.

'$cuName', '$caName', '$appDate', '$ema', '$isDescribe', '$tiJob'

Я рекомендую вам перейти на PDO вместо использования mysqli

6
задан Andy Hayden 20 May 2013 в 16:51
поделиться

1 ответ

Хорошо, изменитесь на предыдущий ответ. Поскольку существует неявное преобразование из Int64 кому: Double (но не наоборот), который будет типом результата выражения. Таким образом, когда Вы ожидаете получать помещенное в коробку Int64, Вы на самом деле получаете помещенное в коробку Double (но со значением, которое первоначально прибыло из Int64.Parse).

На всякий случай это не достаточно ясно, давайте изменимся весь return операторы, таким образом, что они просто возвращают переменную. Вот исходный код:

private static object ParseNumber(string token, FieldDefinition def)
{
  if (def.Fraction > 0)
    return Double.Parse(token);
  else
    return Int64.Parse(token);
}

Преобразуйте это соответственно:

private static object ParseNumber(string token, FieldDefinition def)
{
  if (def.Fraction > 0)
  {
    double d = Double.Parse(token);
    object boxed = d; // Result is a boxed Double
    return boxed;
  }
  else
  {
    long l = Int64.Parse(token);
    object boxed = l; // Result is a boxed Int64
    return boxed;
  }
}

И теперь давайте сделаем то же к версии с условным оператором:

private static object ParseNumber(string token, FieldDefinition def)
{
  return def.Fraction > 0 ? Double.Parse(token) : Int64.Parse(token);
}

становится

private static object ParseNumber(string token, FieldDefinition def)
{
  // The Int64.Parse branch will implicitly convert to Double
  double d = def.Fraction > 0 ? Double.Parse(token) : Int64.Parse(token);
  object boxed = d; // *Always* a Double
  return boxed;
}

Править: Согласно просьбе, немного больше информации. Тип условного выражения формы

X ? Y : Z

зависит от типов Y и Z, который я назову TY и TZ. Существует несколько опций:

  • TY и TZ тот же тип: результатом является тот тип
  • Существует неявное преобразование из TY кому: TZ но не от TZ кому: TY: результат имеет тип TZ и преобразование используется, если первое ответвление используется.
  • Существует неявное преобразование из TZ кому: TY но не от TY кому: TZ: результат имеет тип TY и преобразование используется, если второе ответвление используется.
  • В обоих направлениях существует неявное преобразование: ошибка времени компиляции
  • Так или иначе нет никаких преобразований: ошибка времени компиляции

Это помогает?

12
ответ дан 9 December 2019 в 20:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: