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

标签 c# asp.net-mvc

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

例如,我可以编写 TempData[MyClass.Message]TempData[MyEnum.Message.ToString()] 而不是 TempData["Message"]

public class MyClass
{
    public const string Message = "Message";
}

public enum MyEnum
{
   Message,
   Others
}

我的问题是:避免魔术字符串键的更好方法是什么?在类中使用字符串常量键或将枚举与 ToString() 一起使用?

最佳答案

这取决于偏好和使用。

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

public void SomeFunction(MyEnum someValue)
{
}

或者

TempData[MyEnum.Message]

对于 const 字符串,你不能。

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

您还没有提供第三个选项,那就是将您的“常量”放在您的配置设置 (App.Config) 中。这将允许您在编译时间后配置它们。您现在可能不需要它,但将来可能需要,因此值得考虑。

其中之一可能更适合全局化目的。我不确定是哪一个,因为我从未将应用程序全局化。我假设无论哪个在卫星组件中起作用。

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

关于c# - 哪个是避免魔术字符串键的更好方法?在类中使用字符串常量键还是使用枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4989684/

相关文章:

C#泛型无效的原因

c# - 模式 : "if (obj is Abc && (obj as Abc) ...)" 的方法

c# 运行时参数值的反射电流

javascript - 提前输入和 Taginput : Issue with Remote Fetch

JQuery Validation 暂时删除必需的标签

c# - 将 C# REST API 安全地暴露给脚本语言,例如 Python

c# - 在预定义时间后停止 asp.net c# 中的计时器

jquery - 如何让jquery文件上传回发除[httpPost]index.cshtml()之外的指定操作?

c# - 强类型 View 和共享 View

c# - 如何使用来自常规 Web 表单的 MVC 操作结果(伪造的 ControllerContext)?