Ste*_*nds 3 c# regex visual-studio
在 C# 中,异步方法(用async关键字标记的那些)的约定之一是它们的名称应以“Async”后缀结尾:
public async Task MyMethod(/* params */) ... <-- Bad, missing "Async" suffix
public async Task MyMethodAsync(/* params */) ... <-- Good, as per convention
Run Code Online (Sandbox Code Playgroud)
我最近写了很多异步代码,我担心我可能忘记在某些方法上加上“Async”后缀。
是否有任何正则表达式可以用来查找那些标有async但没有“Async”后缀的方法?如果可能的话,可以反向进行(即找到方法也有一个“异步”后缀,但那些没有标有async关键字)?
如果这对答案有任何影响,我希望将正则表达式粘贴到 Visual Studio 中的“在文件中查找”对话框中。
我猜像 FxCop、CodeRush 或 ReSharper 这样的工具可能已经就这样的事情发出警告,但是鉴于我的工作场所,后两者不是一个选项,如果我能做到这一点,我宁愿不必安装和配置前者使用简单的正则表达式。
在这里使用正则表达式:
(?i)async.*(?<!async)\(
Run Code Online (Sandbox Code Playgroud)
它查找关键字 async ,然后在它之前查找没有 ("?<!") async 的 "("。
编辑:更好的版本。谢谢@安德鲁
Task\s+(\w+(?<!Async))\(
Run Code Online (Sandbox Code Playgroud)
这将为您提供在 和 处具有小的书面异步的方法。此外,它还允许使用查找和替换。
这是一个也适用于泛型方法和返回结果的方法(可能再次使用泛型)的方法。
async (void|Task(<.*>)?) [^<\(]*(?<!Async)(?:<.*?>)?\(
Run Code Online (Sandbox Code Playgroud)
我已经根据以下模式对其进行了测试:
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>()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |