问题描述
在C#/.NET应用程序编程开发,经常会有读取配置文件(app.config,web.config)选项值的操作,比如有类似这样的配置文件:
<appSettings>
<add key="DebugMode" value="true"/>
<add key="Email.Host" value="smpt.gmail.com"/>
<add key="Email.Port" value="993"/>
<add key="Email.Ssl" value="true"/>
</appSettings>
在C#中,常规的读取配置文件选项的作法是:
var debugMode = Convert.ToBoolean(ConfigurationManager.AppSettings["DebugMode"]);
var emailHost = ConfigurationManager.AppSettings["Email.Host"];
var emailPort = Convert.ToInt32(ConfigurationManager.AppSettings["Email.Port"]);
var emailSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["Email.Ssl"]);
以上的方法在运行结果上是可以的,但不够灵活,每个选项都需要手动读取并且转换成对应的数据类型。
那么,有没有一种方法,可以返回泛型的数据类型,而不需要每次都手动去转换呢?
方案一
使用泛型方法,以配置选项的key
作为方法的参数传入,然后使用Convert.ChangeType()
动态转换数据类型,如下:
static void Main()
{
var debugMode = ConfigSetting<bool>("DebugMode");
var emailHost = ConfigSetting<string>("Email.Host");
var emailPort = ConfigSetting<int>("Email.Port");
var emailSsl = ConfigSetting<bool>("Email.Ssl");
Console.WriteLine($"debugMode:{debugMode}");
Console.WriteLine($"emailHost:{emailHost}");
Console.WriteLine($"emailPort:{emailPort}");
Console.WriteLine($"emailSsl:{emailSsl}");
Console.ReadLine();
}
private static T ConfigSetting<T>(string settingKey)
{
return (T)Convert.ChangeType(ConfigurationManager.AppSettings[settingKey], typeof(T));
}
输出结果:
debugMode:True
emailHost:smpt.gmail.com
emailPort:993
emailSsl:True
温馨提示:本文标注有(完整示例)的示例代码可以直接粘贴在try.dot.net中运行。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册