为什么.NET警告'未使用的变量'而不是'未使用的参数'? (我相信Java在两种情况下都会发出警告。)
为什么.NET不关心'未使用的参数'?
答案 0 :(得分:9)
在我看来,您可能真的想要保留未使用的参数有几个原因;例如,假设一个应用程序链接到您的DLL,并且您在DLL中进行了更改 - 为了避免重新编译应用程序,您可能希望保持函数签名相同。
我想不出你想要留下未使用的变量和未注释掉的任何类似原因。
答案 1 :(得分:7)
这不是技术上的答案,如果有的话,我当然不知道技术答案。但是,既然你问过。
未使用的变量完全未附加。它们没有任何东西的锚点,除了占用堆栈空间外,它们几乎没有任何东西。因此,没有正当理由在完整的程序中使用未使用的变量。您可以在编码时声明变量,因为您知道自己要以后需要它们,而您现在只是实现函数的一部分,但是一旦您的应用程序生产就绪,未使用的变量除了占用空间外什么都不做。
您可能拥有/保留未使用的参数的原因有很多。首先,您必须重构引用该函数的每一行代码。这不一定容易或可能。
如果你有一个编写的API,实际上不可能改变所有这些代码行。因此,在某些情况下,您必须保留未使用的参数以保持API一致性。
其次,如果您坚持或实现一个接口,那么您没有选择删除未使用的变量,它会被强加给您。即使您不需要变量中的任何信息,也必须实现正确的调用,因此最终会使用未使用的参数。
第三,如果你正在创建一个新的API,并且有很多东西需要的信息,而不是这个特定的调用,为了保持一致,它可以放在那里。或者如果它是一个将在下一个版本中实现的功能,那么你也可以在第一次使用该权限,这样你下一个版本就不会成为一个破坏版本。
最终,不同之处在于参数是给您的信息,因此您可能并不总是需要全部使用,但变量是您所说的需要立即的信息。由于局部变量是立即的并且不会影响范围之外的任何事情,因此摆脱未使用的变量要容易得多并且没有任何缺点。
答案 2 :(得分:1)
好问题!我假设Visual Studio团队还没有实现。我知道其他代码检查工具,比如JetBrains的ReSharper,会警告你未使用的参数。
此外,正如另一个答案所指出的,可能有理由保留未使用的参数。对于公共方法,参数可能由另一个程序集使用。
答案 3 :(得分:0)
编译器删除未使用的局部变量并不重要。我认为编译器警告局部变量的主要原因是因为它们的存在没有被使用很可能是由于疏忽(要么你声明了一个你不需要的变量,要么你重构了一个变量,现在需要的变量不再需要)
答案 4 :(得分:0)
您可能正在使用该特定实现不需要的值实现接口方法或回调(委托签名)。例如,我永远不会记得在标准事件回调中使用sender参数。这将在整个地方被标记。