场景
我有一个类用于声明在程序中使用的 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()
有什么影响吗?
我应该坚持只使用硬编码字符串吗?
最佳答案
虽然我认为 nameof
的使用很聪明,但我可以想到一些可能会给您带来问题的场景(并非所有这些都适用于您):
1/有些字符串值的名称和值不能相同。例如,任何以数字开头的字符串值都不能用作常量的名称。因此,您将遇到无法使用 nameof
的异常(exception)情况。
2/根据这些值的使用方式(例如,如果它们是存储在数据库、xml 文件中的值的名称等),那么您不能随意更改这些值 - 这很好,直到您来重构。如果您想重命名常量以使其更具可读性(或更正以前开发人员的拼写错误),那么如果您使用的是 nameof
,则无法更改它。
3/对于其他必须维护您的代码的开发人员,请考虑哪个更具可读性:
public const string ConstantA = nameof(ContantA);
或
public const string ConstantA = "ConstantA";
个人认为是后者。在我看来,如果您采用 nameof
路线,那么这可能会让其他开发人员停下来想知道您为什么这样做。这也意味着重要的是常量的名称,而如果您的使用场景与我的一样,那么重要的是值,名称是为了方便起见。
如果您承认有时您无法使用 nameof
,那么使用它真的有什么好处吗?除了上述之外,我没有看到任何缺点。我个人主张坚持使用传统的硬编码字符串常量。
总而言之,如果您的目标只是简单地确保您不会多次使用相同的字符串值,那么(因为如果两个名称相同,这会给您带来编译器错误)这将是一个非常有效的解决方案。
关于c# - 用 nameof() 声明常量,常量作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888699/