不带ELSE的内联IF
本文关键字:IF ELSE 不带 | 更新日期: 2023-09-27 18:05:13
我试图根据string
中的0/1模式更新List
中对象的属性。
//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);
我对我的内联if
-语句的else
-子句: s.IsDeleted = s.IsDeleted
有点难过。我理解内联if
需要一个else
子句,因为它需要返回一个值,但它让我想知道是否有一个更干净的方法来做到这一点。
您可以使用:
s.IsDeleted = pattern[index] == '1' || s.IsDeleted
如果已经是true
,不管pattern[index]
,它都将保持true
,否则只有当pattern[index]
是'1'
时它才会生效
这是另一个解决方案
s.IsDeleted = pattern[index] == '1' ? true : s.IsDeleted
筛选并仅在需要的地方应用操作。你不会用这样的三进制来写foreach
的等价物,所以我也不明白你为什么要在LINQ中这样做。
list.Where((s, index) => pattern[index] == '1').Select(s => s.IsDeleted = true);
请注意,在Select
中发生突变是很奇怪的(在三元数中发生突变是很奇怪的);在这种情况下,你的listWithDeleted
实际上返回一个IEnumerable<bool>
(三进制的结果),这似乎很奇怪。最好使用List.ForEach
或您自己的void
返回IEnumerable.ForEach
扩展,使意图更清晰。