我有这两条 LINQ 行,它们仅在一种情况下不同。
node.Image.Tag == null
和 node.Image.Tag != null
if (treeSelectedNode.Image.Tag == null)
{
radNode = tree.Find(node => node.Level == 0 && node.Image.Tag == null
&& node.Text.Equals(treeSelectedNode.Text));
}
else
{
radNode = tree.Find(node => node.Level == 0 && node.Image.Tag != null
&& node.Text.Equals(treeSelectedNode.Text));
}
有没有办法在 LINQ 行之前创建条件然后使用它,以便我可以删除多余的行?
我知道我可以做这样的事情:
radNode = treeSelectedNode.Image.Tag == null ? tree.Find(node => node.Level == 0
&& node.Image.Tag == null && node.Text.Equals(treeSelectedNode.Text)) :
tree.Find(node => node.Level == 0 && node.Image.Tag != null
&& node.Text.Equals(treeSelectedNode.Text));
但这不是我想要的。
最佳答案
检查条件 node.Image.Tag == null
的结果是否与 treeSelected.Image.Tag == null
的结果相同:
radNode = tree.Find(node => node.Level == 0 && ((node.Image.Tag == null) == (treeSelectedNode.Image.Tag == null))
&& node.Text.Equals(treeSelectedNode.Text))
更新
部分解决@KhanTo 的性能问题:
Boolean selectedImgTagIsNull = treeSelected.Image.Tag == null;
radNode = tree.Find(node => node.Level == 0 && ((node.Image.Tag == null) == selectedImgTagIsNull)
&& node.Text.Equals(treeSelectedNode.Text))
但是,我怀疑即使对于我的原始代码,JIT 优化也很有可能产生相同的结果。
关于c# - 通过另一个条件更改 LINQ 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30147990/