在代码中使用大量硬编码字符串

Nic*_*rca 12 c#

当我查看我的代码时,我正在编写类似的东西......

if (role == "Customer")
{
    bCustomer = true;
}
else if (role == "Branch")
{
    bIsBranch = true;
}
Run Code Online (Sandbox Code Playgroud)

要么

foreach(DataRow as row in myDataSet.Tables[0].Rows)
{
    row["someField"]=somefield.Tostring()
}
Run Code Online (Sandbox Code Playgroud)

你们这样做吗?什么时候可以做,什么时候不应该这样做?如果有任何更好的方法来写这个怎么办?

谢谢你的评论:我想我应该添加if(为了这个例子的目的)我只使用这个角色比较一次?创建一个全新的课程仍然是一个更好的主意吗?我是否应该有一个名为"常量"的类是多个类,它们包含特定的常量,例如"roles"类?

jru*_*ell 29

不.不要使用" 魔术字符串 ".而是创建一个包含常量的静态类,或者如果可以的话创建一​​个枚举.

例如:

public static class Roles
{
  public const string Customer = "Customer";
  public const string Branch = "Branch";
}
Run Code Online (Sandbox Code Playgroud)

用法:

if (role == Roles.Customer)
{

}
else if (role == Roles.Branch)
{

}
Run Code Online (Sandbox Code Playgroud)

以下是各种解决方案良好讨论.

  • 这与语言无关,只是源代码中的硬编码字符串值。作为一种静态类型的编译语言,编译器会捕获任何关键字或类型的拼写错误。 (2认同)
  • 在 C#(或 .NET 和许多其他语言)中,使用“public const”变量被认为是一种代码味道。当您使用“const”变量时,您需要确保它们不能离开程序集的范围(请参阅[此处](https://exceptionnotfound.net/const-vs-static-vs-readonly-in-c-sharp- applications/) 以及 [Microsoft 官方文档](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constants) 中的注释。相反,将“const”设置为内部变量或使用“public static readonly”变量。 (2认同)