Car*_*lis 14 c# linq-to-objects
考虑以下:
bool invalidChildren = this.Children.Any(c => !c.IsValid());
Run Code Online (Sandbox Code Playgroud)
此类具有一组具有IsValid()方法的子对象.假设该IsValid()方法是处理器密集型任务.遇到的第一个孩子对象,其中经过IsValid()是false,理论上可以处理停止,因为结果可能永远不会成为现实.LINQ to对象实际上是在第一个之后停止评估IsValid() = false(如逻辑AND)还是继续评估所有子对象?
显然我可以把它放在foreach循环中并打破第一个无效结果,但我只是想知道对象的LINQ是否足够智能来做到这一点.
编辑: 谢谢你的答案,由于某种原因,我不认为自己在MSDN上查找它.
是的,一旦评估结果就会停止.这是一个快速证明:
class Program
{
static void Main(string[] args)
{
bool allvalid = TestClasses().Any(t => !t.IsValid());
Console.ReadLine();
}
public static IEnumerable<TestClass> TestClasses()
{
yield return new TestClass() { IsValid = () => { Console.Write(string.Format("TRUE{0}",Environment.NewLine)); return true; } };
yield return new TestClass() { IsValid = () => { Console.Write(string.Format("FALSE{0}", Environment.NewLine)); return false; } };
yield return new TestClass() { IsValid = () => { Console.Write(string.Format("TRUE{0}", Environment.NewLine)); return true; } };
yield return new TestClass() { IsValid = () => { Console.Write(string.Format("TRUE{0}", Environment.NewLine)); return true; } };
}
}
public class TestClass
{
public Func<bool> IsValid {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2855 次 |
| 最近记录: |