我尝试了很多东西,但对我来说最符合逻辑的是这个:
int divisor = AllMyControls.Take(p => p.IsActiveUserControlChecked).Count();
Run Code Online (Sandbox Code Playgroud)
AllMyControls
是一家集的UserControls
,我想知道的是有多少UserControls
有IsActiveUserControlChecked
属性设置为true.
我在VS中获得的是:
Cannot convert lambda expression to type 'int' because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)
我的表情有什么问题?
Adr*_*iro 55
int divisor = AllMyControls.Where(p => p.IsActiveUserControlChecked).Count()
Run Code Online (Sandbox Code Playgroud)
或者干脆
int divisor = AllMyControls.Count(p => p.IsActiveUserControlChecked);
Run Code Online (Sandbox Code Playgroud)
既然你是初学者,那么看看Enumerable
文档是值得的
为什么不直接使用Count
?该== true
陈述也非常多余.
int divisor = AllMyControls.Count(p => p.IsActiveUserControlChecked);
Run Code Online (Sandbox Code Playgroud)
此外,您在Take方法上收到错误,因为它正在等待int
.您需要从要获取的集合的开头指定连续元素的数量,不能放置lambda表达式.你需要使用TakeWhile.所以
int divisor = AllMyControls.TakeWhile(p => p.IsActiveUserControlChecked == true).Count();
Run Code Online (Sandbox Code Playgroud)
本来是正确的,但不会按照你期望的方式工作; 一旦条件被打破就停止.所以,如果AllMyControls包含true, true, false, true
,TakeWhile
与Count
将返回2,而不是你预期的3.
归档时间: |
|
查看次数: |
50250 次 |
最近记录: |