我有一个类用于声明程序周围使用的string
常量:
public static class StringConstants
{
public const string ConstantA = "ConstantA";
public const string ConstantB = "ConstantB";
// ...
}
基本上,常量的实际值与分配和消耗时使用的无关。它只是用于检查。
常量名称将是相当不言自明的,但我想尝试避免多次使用相同的字符串值。
我知道nameof()
是在编译时进行评估的,因此完全可以将const string
的值分配给nameof()
成员。
为了节省写出这些神奇的字符串,我考虑过使用nameof()
常量本身。
像这样:
public static class StringConstants
{
public const string ConstantA = nameof(ConstantA);
public const string ConstantB = nameof(ConstantB);
// ...
}
我想除了重构之外,使用nameof()
没有什么好处?
分配常量时使用nameof()
会有什么影响吗?
我应该坚持使用硬编码的字符串吗?
答案 0 :(得分:2)
虽然我认为使用import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt
很聪明,但我可以想到一些可能会给您带来麻烦的情况(并非所有这些情况都可能适用于您):
1 /有些字符串值的名称和值不能相同。例如,任何以数字开头的字符串值都不能用作常量的名称。因此,在无法使用nameof
的地方会有一些例外。
2 /根据这些值的使用方式(例如,如果它们是存储在数据库,xml文件等中的值的名称),那么您就不必随意更改这些值-直到您可以使用来重构。如果要重命名常量以使其更具可读性(或更正以前的开发人员的拼写错误),那么如果使用nameof
,则无法更改它。
3 /对于其他必须维护您的代码的开发人员,请考虑哪个更易读:
nameof
或
public const string ConstantA = nameof(ContantA);
我个人认为是后者。我认为,如果您走public const string ConstantA = "ConstantA";
路线,那么这可能会使其他开发人员停下来并想知道您为什么这样做。这也暗示着常量的名称很重要,而如果您的使用情况像我的那样,那么值很重要,并且该名称是为了方便。
如果您接受到有时无法使用nameof
的话,那么使用它真的有任何真正的好处吗?除了以上所述,我看不到任何不利之处。我个人会提倡坚持使用传统的硬编码字符串常量。
总而言之,如果您的目标只是确保不多次使用相同的字符串值,那么(因为如果两个名称相同,这将给您带来编译器错误),这将是非常有效的解决方案。