【问题标题】:ReSharper Search pattern for .First([With condition]) ignoring .First().First([With condition]) 忽略 .First() 的 ReSharper 搜索模式
【发布时间】:2013-07-03 01:25:08
【问题描述】:

正如标题所述,有没有一种方法可以使用 ReSharper 搜索模式来查找包含条件的 .First() 的所有实例,而忽略 .First()?

本次搜索的动机是为了回答问题
Why is LINQ .Where(predicate).First() faster than .First(predicate)?

我们想看看我们使用 First() 有多少次条件。搜索将扩展为查找 .FirstOrDefault()。

【问题讨论】:

  • 您可能会花费更多时间搜索带有谓词的First 实例,而不是此类调用的运行时间加在一起。您是否担心这样的微优化?
  • 大约 30% 的改进仍然是一个改进。尤其是在处理较大的列表时。您是否暗示无法创建搜索条件?
  • 他不是说这不是一种改进,也不是说它不能做到。他说改变它所花费的时间可能会比改变它所节省的时间要长。 30% 的非常小的东西甚至更小。您确定这是您应用中最大的性能问题吗?
  • 使用 Joe White 提供的信息,代码库的更改只需要几秒钟。

标签: c# performance linq resharper structural-search


【解决方案1】:

您为此创建了一个您所期望的模式。转到 ReSharper > Find > Search with Pattern,然后输入此模式:

$enumerable$.First($args$)

然后在右边的占位符列表中,创建两个占位符:

  • 添加占位符 > 表达式,并将其命名为 enumerable。不要指定类型(我尝试将类型指定为IEnumerable<out T> 和后代,但由于某种原因未能找到任何用法;但如果您不指定类型,它可以工作)。
  • 添加占位符 > 参数,将其命名为 args,选中“限制最小参数数量”复选框,并将数字设置为 1。

我对此进行了测试,它找到了list.First(i => i%2 == 0),但没有找到list.First(),所以看起来正是您所要求的。

【讨论】:

  • 很棒的解决方案 Joe 和 ReSharper 也很容易实现替换。谢谢。
【解决方案2】:

您可以只使用 VisualStudio 查找并使用 RegEx 选项

类似:.First(\({.+}\));

您还可以使用查找和替换将所有谓词更改为Where +First`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多