哪个是避免魔术字符串键的更好方法?在类中使用字符串const键还是使用枚举?

LaT*_*TeX 8 c# asp.net-mvc

我的想法是避免在我的Asp.Net MVC应用程序中使用魔术字符串键.为此,我想创建要在应用程序中共享的字符串常量键.

例如,我可以写TempData[MyClass.Message]TempData[MyEnum.Message.ToString()]代替TempData["Message"].

public class MyClass
{
    public const string Message = "Message";
}
Run Code Online (Sandbox Code Playgroud)

public enum MyEnum
{
   Message,
   Others
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:哪种方法可以避免使用魔法字符串键?在类中使用字符串const键或与枚举一起使用ToString()

Mub*_*han 5

你应该去const字符串,因为它可以包含空格/特殊字符,如果那些是你的要求.否则将TempData更改Dictionary<MyEnum,object>为更好的方法.

  • +1 - 关于'Enum`不允许空格的好点. (2认同)

Mer*_*ham 5

这取决于偏好和用法.

您可以以强类型方式接受枚举值:

public void SomeFunction(MyEnum someValue)
{
}
Run Code Online (Sandbox Code Playgroud)

要么

TempData[MyEnum.Message]
Run Code Online (Sandbox Code Playgroud)

使用const字符串,你不能.

您还有一种内置方法来枚举枚举中的值.

您还没有提供第三个选项,即将"常量"放在配置设置(App.Config)中.这将允许您在编译时配置它们.你现在可能不需要这个,但是你可能在将来,所以值得考虑.

其中一个可能更适合全球化目的.我不确定哪个,因为我从来没有全球化应用程序.无论哪个在卫星组件中工作,我都假设.

基本上,它归结为什么TempData是,以及你打算如何使用它.