我正在尝试根据List
中的0/1模式更新string
中对象的属性。
//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
语句的: s.IsDeleted = s.IsDeleted
- if
条款感到有些遗憾。我理解内联if
需要一个else
- 子句,因为它需要返回一个值,但它让我想知道是否有更简洁的方法可以做到这一点。
答案 0 :(得分:10)
您可以使用:
s.IsDeleted = pattern[index] == '1' || s.IsDeleted
如果它已经true
,则无论true
如何,它都将保持pattern[index]
,否则只有pattern[index]
为'1'
答案 1 :(得分:1)
这是另一个解决方案
s.IsDeleted = pattern[index] == '1' ? true : s.IsDeleted
答案 2 :(得分:0)
过滤并仅在您需要的地方应用操作。你不会在这样的三元组中写出foreach
等价物,所以我也不明白你为什么要在LINQ那样做。
list.Where((s, index) => pattern[index] == '1').Select(s => s.IsDeleted = true);
请注意,Select
中的变异很奇怪(由于三元变异的陌生感而复杂化);在这种情况下,您的listWithDeleted
实际上会返回IEnumerable<bool>
(三元的结果),这似乎很奇怪。最好使用List.ForEach
或您自己的void
返回IEnumerable.ForEach
扩展名来使意图更清晰一些。