我想自动删除所有显式类型,并在一个大解决方案中使用var关键字进行交换,例如而不是
int a = 1;
我希望:
var a = 1;
这只是化妆品,解决方案中的代码完美无缺,我只想让事情保持一致,因为我开始使用显式类型,但后来使用了var-keywords。
我猜我必须编写某种代码解析器 - 听起来有点麻烦。有人知道一个简单的解决方案吗?
干杯, 克里斯
答案 0 :(得分:6)
这不是本身的答案,但是评论的时间太长了。
你应该强烈考虑不这样做。混合显式和推理类型没有风格问题(您应该在需要时推断类型,无论是使用匿名类型还是使代码更易于阅读),并且您将遇到许多潜在问题:
null
的声明不合格即
object foo = "test";
...
foo = 2;
显然,这是一个简单(且不太可能)的示例,但将foo
从object
更改为var
会导致foo
被输入string
而不是object
,并且会改变代码的语义(在这种情况下它甚至不会编译,但你可能很容易遇到更难以找到的情况,它会改变重载决议但不会t 产生编译时错误。)
换句话说,请不要这样做。
答案 1 :(得分:1)
首先,这可能不是一个好主意。 var
优于int
;许多声明几乎都是这么简单。
但如果你必须......
部分手动解决方案是将ReSharper的“使用var”提示转换为警告并让它全部修复。我不知道ReSharper是否会这样做 en masse ,但是我经常用快速序列的 Alt + <来完成一个非常糟糕的第三方代码。 kbd> PgDn , Alt + 输入。
这具有ReSharper尊重代码语义的显着优势。它不会不加区分地替换类型,我很确定它只会进行不会影响程序含义的更改。例如:它不会取代object o = "hello";
(我想;我不是在VS面前检查这个)。
答案 2 :(得分:0)
了解Lex&amp; YACC。您可以将其与perl或awk脚本组合以机械编辑源。
您也可以使用CEDET在emacs中执行此操作。它解析代码模块并生成其代码分析表。
在任何一种情况下,您都需要对代码进行分析,该代码描述了...类声明(类名,父类型,起点和终点),方法声明(类似),变量声明等等。 。然后你将编写一些代码(perl,awk,powershell,elisp,等等)来遍历表,并对每个适当的变量声明进行替换。
答案 3 :(得分:0)
我要警惕以自动方式这样做。有些地方实际上可能会改变程序的语义或引入错误。例如,
IEnumerable<string> list = MethodThatReturnsListType();
或
string foo = null;
if (!dict.TryGetValue( "bar", out foo ))
{
foo = "default";
}
由于这些不是错误,我会在您触摸代码时将其替换为其他原因。这样你就可以检查周围的代码,并确保你没有改变语义,避免引入需要修复的错误。
答案 4 :(得分:-2)
Visual Studio IDE中的搜索/替换是什么 例如,搜索vor'int'并将其替换为'var'。