关于类中字符串的Getter或Const的设计建议 - 其他人在做什么?

use*_*190 5 c#

我正在寻求一些关于在我的课程中使用'常量'字符串的建议方法的建议,例如

public string EmployeesString { get { return "Employees";  } }

const string EmployeeString = "Employee";
Run Code Online (Sandbox Code Playgroud)

我想要实现这些的原因,即通过const或通过getter,是因为在我的类中,我有使用这些字符串作为参数的方法和构造函数,我想要避免拼写错误并且还要避免使用字符串(弱类型?),我想强烈引用它们,例如

DoSomething(this.EmployeeString, employee);
Run Code Online (Sandbox Code Playgroud)

还有什么其他的做法?任何建议将不胜感激!这好/坏吗?

Ree*_*sey 3

在我看来,“正确”的答案取决于您使用该字符串的方式和原因。

如果字符串用于显示或呈现给用户,则该属性是更好的设计。这使得以后通过将常量移动到资源文件中来添加本地化变得更加容易,而无需更改 API。这也使得在不破坏其他代码的情况下更容易调整您的类,因为您可以随时更改“常量”而不会破坏其他程序集。

我很少找到第二种情况的适当用途 - 很少有字符串是真正恒定的,当它们是时,我相信它们通常更好地表示为枚举而不是字符串。这几乎总是比代码中的“魔术字符串”更好。

罕见的例外通常是在与遗留代码交互时 - 如果您正在处理一个需要字符串的单独 API,并且该字符串确实是常量,那么使用常量可能会“更好”,因为它更高效且更可靠。其意图非常明确。

另外,请记住这两种方法可以一起使用:

private const string employeeString = "Employee";

public string EmployeeString { get { return employeeString; } }
Run Code Online (Sandbox Code Playgroud)

这允许您使用该常量,使其意图清晰,但稍后可以轻松更改它,而不会破坏其他代码或更改您的 API。(我个人更喜欢这个而不是上面的“第二个”选项,因为属性 getter 中的魔术字符串对我来说是一种代码味道 - 我喜欢我的常量是明显的常量,但仍然更喜欢属性。)