Я собираюсь догадку, что ваше утверждение о том, что код «слегка модифицирован для работы» означает, что этот код:
newlistitem.Value = options[j][valuefield].ToString() +
((options[j]["pdprice"].ToString().Length > 0) ?
"/" + options[j]["pdprice"].ToString() : "");
на самом деле выглядел так:
newlistitem.Value = options[j][valuefield].ToString() +
options[j]["pdprice"].ToString().Length > 0 ?
"/" + options[j]["pdprice"].ToString() : "";
(обратите внимание на отсутствующие скобки)
Причина, по которой этот код приведет к этой ошибке, состоит в том, что из-за приоритета оператора, что получится оцениваемое это:
String a = options[j][valuefield].ToString();
Int32 b = options[j]["pdprice"].ToString().Length;
String c = a + b;
Boolean d = c > 0;
String e = "/" + options[j]["pdprice"].ToString();
String f = "";
newlistitem.value = d ? e : f;
С таким образом, чтобы смотреть на него, a+b
будет производить новую строку, так как добавить что-то к строке будет преобразовывать что-то в строку для конкатенации. В принципе, «xyz» + 3 дает «xyz3».
Добавляя скобку, ваш «небольшое изменение», вы по существу переписать код, чтобы сделать это:
String a = options[j][valuefield].ToString();
String b = options[j]["pdprice"].ToString().Length;
Boolean c = b > 0; <-- this is different
String d = "/" + options[j]["pdprice"].ToString();
String e = "";
String f = c ? d : e;
String g = a + f; <-- and this
newlistitem.value = g;
Обратите внимание на разницу между d
в первом коде и c
во втором коде. Вы переместили конкатенацию строки, где она принадлежит, вместе с другими строками.
Так что ваша небольшая модификация работает, так как это правильный способ сделать это, , если вы хотите сохранить эти выражения.
The accepted answer - это намного лучшая альтернатива. Моя цель состояла в том, чтобы дать вам объяснение причины исключения.
отправьте всю строку и строку сверху и снизу. – tster
, пожалуйста, разместите окружающий код, чтобы мы могли лучше понять, что происходит. – user10635
Это был заказ операций. + Добавлен в строку до? оценил? –