这是需要做的事情。
让我们假设您拥有以下C#代码:
private Int32 DoSomething(Int32 number, String message)
{
StringBuilder stringBuilder = null;
Regex regex = null;
// code goes here
}
这需要成为:
private System.Int32 DoSomething(System.Int32 number, System.String message)
{
System.Text.StringBuilder stringBuilder = null;
System.Text.RegularExpressions.Regex regex = null;
// code goes here
}
我找到了相反的工具(例如ReSharper),但这些类型绝对需要完全合格,而不仅仅是一致。
答案 0 :(得分:3)
您可以使用Microsoft Roslyn为此任务编写自己的工具。它允许您解析源代码并进行分析和修改。目前它是CTP版本,但它将完成工作。并且有足够的文档可以满足您的需求。很抱歉没有发布任何链接,我是用手机写的。
答案 1 :(得分:1)
我不确定这样的工具是否存在。
一种方法是删除所有使用,然后修复错误。在右键单击类型时可以获得的菜单选项可以添加using语句,也可以完全限定类型。
答案 2 :(得分:1)
这对罗斯林来说应该不会太难。您需要获取所有TypeSyntax
个节点,然后向语义模型询问相应的ITypeSymbol
,然后从符号中获取完全限定名称,最后用新{TypeSyntax
节点替换TypeSyntax
节点1}} node。
我写了一个quickfix,用尽可能短的具体类型替换var
,您可能希望将其用作灵感:https://github.com/CodesInChaos/Roslyn/tree/master/Chaos.VarToConcrete
由于您想要替换所有出现,并且Roslyn-Visual-Studio还不太稳定,我会选择roslyn控制台应用程序而不是代码发布提供程序。
答案 3 :(得分:0)
不确定工具,但是嘿......
怎么样?查找: Int32(以及您需要的每种类型)
替换为: System.Int32(等等)
不是最好的解决方案,但是使用小型项目比搜索工具花费的时间更少
答案 4 :(得分:0)
它可能对您没有帮助,但C#编译器生成的IL代码会自动执行此操作。
您的代码生成以下IL(如果您添加一行以在DoSomething中返回内容):
.method private hidebysig instance int32
DoSomething(int32 number,
string message) cil managed
{
// Code size 11 (0xb)
.maxstack 1
.locals init ([0] class [mscorlib]System.Text.StringBuilder stringBuilder,
[1] class [System]System.Text.RegularExpressions.Regex regex,
[2] int32 CS$1$0000)
IL_0000: nop
IL_0001: ldnull
IL_0002: stloc.0
IL_0003: ldnull
IL_0004: stloc.1
IL_0005: ldc.i4.1
IL_0006: stloc.2
IL_0007: br.s IL_0009
IL_0009: ldloc.2
IL_000a: ret
} // end of method Program::DoSomething
答案 5 :(得分:0)
为Visual Studio创建一个插件而不是更改所有引用,如何显示具有完全限定名称的叠加层(不仅仅是当鼠标在某个类型上时)?我认为这将需要更少的努力,并可能会增加一个真正的价值,这个编码标准实际上并没有。显然这不是你的想法,但大多数人会同意这肯定会让你的代码更难阅读。为你的上司提供一个很好的扩展,不仅可以帮助他查看你公司的代码,也可以帮助他人,也可以帮助你。
我可以看到其他人也想要这样的功能,但我无法想象每种类型的完全限定名称都会显示在任何地方。
如果安装了Visual Studio SDK,则会获得一个编辑器分类器模板,这可能是一个很好的起点(没有真正考虑过实现)。