Добавьте ссылку на System.Data.DataSetExtensions
, который добавляет поддержку Linq запросов таблиц данных.
Это было бы чем-то как:
string value = (
from row in ds.Tables[0].Rows
select row.Field<string>(0) ).FirstOrDefault();
h.className = h.className + (h.className ? ' error' : 'error')
Вы хотите, чтобы оператор работал для h.className
, лучше уточнить это.
Конечно, h.className + = 'error'
не должно причинить вреда, но это другой вопрос.
Также обратите внимание, что +
имеет приоритет над тернарным оператором: Приоритет операторов JavaScript
Подумайте об этом так:
<variable> = <expression> ? <true clause> : <false clause>
Оператор выполняется в основном следующим образом:
<выражение>
как истинное или ложное? <выражение>
оценивается как истинное, то значение <предложение истина>
назначается <переменная>
, <предложение false>
игнорируется, и выполняется следующий оператор. <выражение>
оценивается значение false, то <предложение true>
игнорируется, а значение <предложение false>
присваивается
. С тернарным оператором в этом и других языках важно понимать, что любой код в
должен давать логический результат при оценке: либо true, либо false.
В вашем примере замените «назначено» в моем объяснении на «добавлено в» или аналогично для любой сокращенной арифметики, которую вы используете, если таковая имеется.
+ =
делает то, что вы хотите, но в тернарном выражении справа от него проверяет, является ли h.className
ложным , что было бы, если бы оно не было определено. Если это правда (т.е. если имя класса уже указано), тогда ошибка добавляется с пробелом (т.е. добавляется новый класс), в противном случае она добавляется без пробела.
Код может быть переписан как вы предлагаете, но вам нужно указать, что h.className
должен использоваться для сравнения истинности, а не для использования его фактического значения в тернарном операторе, поэтому убедитесь, что вы не беспокоитесь о объединение значений одновременно с выполнением вашей тернарной операции:
h.className = h.className + (h.className ? ' error' : 'error');
Правая часть оператора =
вычисляется слева направо. Итак,
g.className = h.className + h.className ? ' error' : 'error';`
эквивалентно
h.className = (h.className + h.className) ? ' error' : 'error';
Чтобы быть эквивалентным
h.className += h.className ? ' error' : 'error';
, вы должны разделить троичный оператор в скобках
h.className = h.className + (h.className ? ' error' : 'error');
if (h.className) {
h.className = h.className + ' error';
} else {
h.className = h.className + 'error';
}
должен быть эквивалентом:
h.className += h.className ? ' error' : 'error';