[C#]在 LINQ 中的另一个条件的变化情况

标签: Linq C#
发布时间: 2017/2/27 4:14:28
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这些两个的 LINQ 行,只是不同的一个条件。

node.Image.Tag == nullnode.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));

但它是不是我想要什么。

解决方法 1:

检查条件下的产物 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 优化会导致同样的事情,甚至为我原始的代码的可能性极高。

官方微信
官方QQ群
31647020