c# - 用 nameof() 声明常量,常量作为值

标签 c# constants nameof

场景

我有一个类用于声明在程序中使用的 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/

相关文章:

c++ - 非成员函数不能有 cv 限定符

c++ - 在构造函数中 ‘Player::Player()’ : error: invalid conversion from ‘const char*’ to ‘char’

c# - .net framework 4 中的 nameof 表达式

C#6 : nameof() current property in getter/setter

c# - Windows Phone 7 - 如何从 while 循环更新 UI?

c# - 拖动滚动条时 Blazor 虚拟化组件和损坏的滚动

c# - 如何让我的 C# 程序休眠 50 毫秒?

c# - InitializeComponent() 上的自定义控件大小

c - 确保施工安全

c# - 在 Roslyn 中解析 nameof 表达式