2009-04-22 72 views
0

我在AppSettings中保留了很多设置,而且我想知道在UpperCase中将它们命名是否是一种很好的做法。本质上,它们与常量相同吗?据我了解,如果你改变了Web.Config,应用程序会重新编译。如何从Web.Config中检索时将变量定义为CONSTANT?

所以,我在想,你应该保持在设置中的AppSettings大写(假设你所有的大写命名的常量。)

而且,应该说得到的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中的东西基本上是不变的。

对此提出建议?

回答

1

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

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

对于调用的TryParse,你会设定在你的构造函数或静态构造函数,这取决于它是否是一个实例或静态字段:

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

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

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

+0

命名准则与否。公司也有命名准则。 – Armstrongest 2009-04-22 23:09:49

+0

如果您有自己的命名指南,您当然可以优先使用它们。但是我没有看到这个问题的关键。注意命名准则应适合所讨论工具的习惯用法。 – Richard 2009-04-23 08:39:30

2

如果你觉得它们实际上是恒定的,并且它们是不可变类型的只读变量(int,string等),那么通过一切手段使用相同的命名约定。的确,这是String.Empty所做的。但是,常量的.NET naming convention不是SHOUTY_CAPS,它是PascalCase

+0

虽然与公共变量不一样吗? – Armstrongest 2009-04-22 16:22:25

1

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

没错,对Web.Config的任何更改都会重新编译应用程序。甚至像换行符一样小。


忽略的命名约定的问题,你可以做你的榜样如下:

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

显然,这不是一个安全的方式做到这一点的事件MAX_USERS不是一个整数,但当MAX_USERS无法设置时,似乎抛出异常将是正确的行动方案。