Я пытаюсь обновить свойство объектов в List
на основе шаблона 0/1 в string
.Inline IF без ELSE
//list.length is always == pattern.length
string pattern = Convert.ToString(8, 2);
var listWithDeleted = list.Select((s, index) => pattern[index] == '1' ? s.IsDeleted == true : s.IsDeleted = s.IsDeleted);
Я немного грустно об else
-clause : s.IsDeleted = s.IsDeleted
моего встраиваемыми if
-statement. Я понимаю, что inlined if
нуждается в else
-clause, поскольку он должен вернуть значение, но это заставило меня задуматься, может ли быть более чистый способ сделать это.
Не будет 'pattern [0]' всегда равным true, а все остальное всегда равно false? Не могли бы вы заменить 'pattern [index] == '1'' на' index == 0'? –
Я думаю, что есть проблема с исходным кодом. Если я попытаюсь скомпилировать оператор присваивания в третьем выражении тернарного оператора, я получу эту ошибку: «Дерево выражений может не содержать оператор присваивания». Вы имеете в виду, 'list.Select ((s, index) => pattern [index] == '1'? S.IsDeleted == true: s.IsDeleted == s.IsDeleted);'? –
@WyattEarp Оригинальные компиляции отлично подходят для меня, хотя и с предупреждением о присвоении той же переменной. –