Cri*_*scu 8 c# regex visual-studio roslyn
我一次又一次地发现自己需要改变一个方法调用的使用.
例如,我有100次类似于此的方法调用:
Helper.GetIntFromData(packetData.Skip(offset).Take(length).ToArray());
Run Code Online (Sandbox Code Playgroud)
需要改为
Helper.GetIntFromData(packetData, offset, length);
Run Code Online (Sandbox Code Playgroud)
这可以通过正则表达式相对容易地解决.但是,如果空白(有时)发挥作用怎么办?
Helper.GetIntFromData(packetData
.Skip( offset )
.Take( length )
.ToArray()
);
Run Code Online (Sandbox Code Playgroud)
仍然可以使用正则表达式,但它现在是一个无法读取的可选空格标记混乱.
好的,但如果参数不总是简单的标识符,而是任意表达式怎么办?
Helper.GetIntFromData(obj.GetData(true).Skip( 7 + GetOffset( item.GetData() ) )
.Take( length1 / length2 ).ToArray());
Run Code Online (Sandbox Code Playgroud)
这是正则表达式真正崩溃的地方.
这可以在今天完成吗?(以某种方式让你保持理智,即没有正则表达式)
是否有VS扩展或独立工具可以处理更高(语义)级别的C#代码?
可以让我搜索的东西(我想象):
Helper.GetIntFromData($expr1.Skip($expr2).Take($expr3).ToArray())
Run Code Online (Sandbox Code Playgroud)
并替换为
Helper.GetIntFromData($1, $2, $3)
Run Code Online (Sandbox Code Playgroud)
C#是否存在这样的工具?(我想它可以围绕罗斯林建造.)
再想一想,你想要实现的目标是危险的,最好避免。正则表达式匹配/替换是一项有限的功能。它无法“理解”复杂的代码,并且注定会失败。考虑一个例子(如果该代码有意义的话,让我们忽略一下):
Helper.GetIntFromData(packetData.Skip(skipArray.Take(1)).Take(length).ToArray());
不是专门为避免“错误Take”而定制的正则表达式是没有机会的。自动替换方法迟早会破坏代码,而您唯一的希望是它足够残酷以生成编译时错误。它也可能会导致很难找到运行时异常或更糟糕的无法解释的行为。代码重构应该使用理解代码的工具来完成,而不是使用识别文本模式的工具。