从Web.Config中检索时,如何将变量定义为CONSTANT?

时间:2009-04-22 16:17:42

标签: .net web-config coding-style constants

我在AppSettings中保留了很多设置,我想知道在UpperCase中命名它们是否合适。从本质上讲,它们与常数相同吗?据我了解,如果您更改Web.Config,该应用程序会重新编译。

所以,我在想,你应该把AppSettings中的设置保持在UPPERCASE中(假设你用所有UPPER案例命名你的常量。)

此外,从AppSettings获取值的变量应该是大写吗?

EG。

String MY_SETTING = ConfigurationManager.AppSettings["MY_SETTING"];

处理这些并使它们看起来和感觉像常量的最佳方法是什么?这甚至是个好主意吗?我能想到的唯一方法就是让它只读:

readonly String MY_SETTING = ConfigurationManager.AppSettings["MY_SETTING"];

但后来我不知道你怎么能用int:

来做到这一点
readonly String MAX_USERS_S = ConfigurationManager.AppSettings["MAX_USERS"];
readonly int MAX_USERS; // needs to be set here... won't compile
int.TryParse(MAX_USERS_S, out MAX_USERS);

我不知何故感觉脏设置只读变量看起来像常量,但对我来说,web.config中的东西基本上是不变的。

建议?

4 个答案:

答案 0 :(得分:2)

如果你认为它们是有效的常量,并且它们只是一个不可变类型的变量(intstring等),那么一定要使用相同的命名约定。实际上,这就是String.Empty所做的。但是,常量的.NET naming convention不是SHOUTY_CAPS,而是PascalCase

答案 1 :(得分:1)

没有。 .NET naming guidelines中没有全大写命名的情况。

答案 2 :(得分:1)

如果你希望它们看起来和感觉像常量,我建议的第一个地方是用Pascal-case命名它们,所以MY_SETTING(它实际上不是一个类似C#的名字)将是“MySetting”。您可以在框架中看到公开暴露的属性和常量。

readonly是去这里的正确方法。在实例字段的情况下,它只能在声明或构造函数中设置。对于静态字段,它只能在静态构造函数或声明中设置。

对于TryParse的调用,您可以在构造函数或静态构造函数中设置它,具体取决于它是实例还是静态字段:

static MyClass()
{
    // The value.
    int myUsers;

    // Try to parse.
    if (int.TryParse(MAX_USERS_S, out myUsers))
    {
        // Assign.
        MyUsers = myUsers;
    }
}

答案 3 :(得分:1)

  

据我了解,如果您更改了Web.Config,该应用程序会重新编译。

这是正确的,对Web.Config的任何更改都将重新编译应用程序。甚至像换行一样小的变化。


忽略命名约定问题,您可以使用您的示例执行以下操作:

readonly int MAX_USERS = 
    int.Parse(ConfigurationManager.AppSettings["MAX_USERS"])

显然,如果MAX_USERS不是int,这不是一种安全的方法,但是当MAX_USERS无法设置时抛出异常似乎是正确的过程行动。