Resharper总是建议我使用const字符串而不是字符串

时间:2009-05-26 08:57:04

标签: resharper const

哪一个好:

string sQuery = "SELECT * FROM table";

const string sQuery = "SELECT * FROM table";

为什么resharper总是建议我这样做?

4 个答案:

答案 0 :(得分:20)

后者更好 - 这意味着:

  • 这不是实例变量,因此您不会在创建的每个实例中都使用冗余字符串引用
  • 您将无法更改变量(您可能不希望这样做)

“const”在从其他程序集和版本控制访问方面还有一些其他影响,但看起来这是一个私有字段,所以它不应该是一个问题。你可以 认为它是:

static readonly string sQuery = ...;

一般来说,我认为最好让字段静态(如果它不是按实例变化,为什么它应该是一个实例变量?)和只读当你可以(可变数据更难以原因)。如果您希望我详细了解static readonlyconst之间的差异,请与我们联系。

答案 1 :(得分:4)

如果字符串永远不会改变并且永远不会在程序集之外使用,那么const是个好主意。如果它永远不会改变,但 在程序集之外使用,静态只读可能是一个更好的主意 - 在调用的站点上“烧入”,而不是存储在一个位置,因此重新编译程序集包含const的不会更新依赖程序集 - 它们也必须重新编译。另一方面,静态只读变量会在依赖程序集中更新。

答案 2 :(得分:1)

如果特定的字符串引用永远不会改变,则ReSharper仅建议这样做。在这种情况下,您使用const string代替string来表达您的意图。

答案 3 :(得分:1)

这样做是因为如果你不小心在你的代码中为sQuery分配了一个新值,如果它是一个const你将得到一个编译错误,所以它会在编译时捕获一个bug。与它的建议相同,即在ctor中设置的成员变量只是readonly