在C#中,异步方法(标有async
关键字的那些)的约定之一是它们的名称应该以" Async"后缀:
public async Task MyMethod(/* params */) ... <-- Bad, missing "Async" suffix
public async Task MyMethodAsync(/* params */) ... <-- Good, as per convention
我最近一直在写很多异步代码,我担心我可能忘记了#34; Async&#34;某些方法的后缀。
我是否可以使用任何正则表达式来查找标有async
但不的方法具有&#34; Async&#34;后缀?如果可能的话,可以反过来做(即找到做的方法有&#34; Async&#34;后缀但不标记的方法使用async
关键字)?
我希望将正则表达式粘贴到&#34; Find In Files&#34; Visual Studio中的对话框,如果这对答案有任何影响。
我猜测像FxCop,CodeRush或ReSharper这样的工具可能已经警告过这样的事情,但是后两者在我的工作场所不是一个选择,而且我不需要安装&amp;如果我可以使用简单的正则表达式完成此操作,请配置前者。
答案 0 :(得分:4)
这里也适用于返回结果的通用方法和方法(可能再次使用泛型)。
async (void|Task(<.*>)?) [^<\(]*(?<!Async)(?:<.*?>)?\(
我已根据以下模式对其进行了测试:
async void Test()
async void Test<T>()
async void Test<T, U>()
async Task Test()
async Task Test<T>()
async Task Test<T, U>()
async Task<T> Test()
async Task<T> Test<T>()
async Task<T> Test<T, U>()
async Task<T<U>> Test()
async Task<T<U>> Test<U>()
async Task<T<U>> Test<T, U>()
答案 1 :(得分:3)
好孩子,干净的代码FTW。 :)除了任何其他答案,这里是我如何通过使用grep
实用程序来实现的:
grep '\basync\b' file.cs | grep -v 'Async('
第一个grep
查找其中包含async
的所有行(作为单词),第二个grep
将其过滤为仅包含Async(
的行。
答案 2 :(得分:3)
这里有正则表达式:
(?i)async.*(?<!async)\(
它会查找关键字async,然后查找&#34;(&#34;没有(&#34;?&lt;!&#34;)async。
编辑: 更好的版本。谢谢@Andrew
Task\s+(\w+(?<!Async))\(
这将为您提供使用小型书面异步的方法。此外,它允许使用查找和替换。