从架构的角度来看,从编码常设角度来看,在asp.net中声明常量/配置驱动变量,以下2方法中哪一个更好。
类型1 -
class Constants
{
public static string ConnectionString
{
get
{
//Get the connection string value from web.config
if (ConfigurationManager.AppSettings["ConnectionString"] != null)
{
return ConfigurationManager.AppSettings["ConnectionString"];
}
else
{
return string.Empty;
}
}
}
}
类型2 -
class Constants
{
public static string ConnectionString = ConfigurationManager.AppSettings["ConnectionString"] != null ?
ConfigurationManager.AppSettings["ConnectionString"] : string.Empty;
}
还有更好的方法吗?使用属性或使用公共变量更好吗?
答案 0 :(得分:2)
首先,null-coalescing运算符使 lot 更简单。
接下来,假设ConfigurationManager.AppSetting["ConnectionString"]
不随时间变化,您可以使用:
// TODO: Rename this...
class Constants
{
private static readonly string connectionString;
public static string ConnectionString { get { return connectionString; } }
static Constants()
{
ConnectionString = ConfigurationManager.AppSettings["ConnectionString"] ?? "";
}
}
或者只是使用每次获取它的属性 - 一个更简单的版本 第一个代码:
// TODO: Rename this...
class Constants
{
public static string ConnectionString
{
get { return ConfigurationManager.AppSettings["ConnectionString"] ?? ""; }
}
}
使用C#6,该属性更加流畅:
// TODO: Rename this...
class Constants
{
public static string ConnectionString =>
ConfigurationManager.AppSettings["ConnectionString"] ?? "";
}
选择是评估ConfigurationManager.AppSettings["ConnectionString"]
表达式还是使用缓存字段不太可能产生太大影响 - 但我 建议使用属性而不是公共字段,如这意味着您可以稍后更改实现(例如,更改其懒惰),而无需担心向后兼容性。