
引言
我前面曾写过一篇《使用配置文件(.settings、.config)存储应用程序配置》,我在其中指出“settings无法实现对一些复杂类型及自定义类型的支持”。
而今天我发现其实它是支持自定义类型的,仅仅是不能支持本项目中的自定义类型,可以支持引用的项目或类库的自定义类型。至于为什么不支持本项目中的自定义类型,我也不得而知,猜想可能是怕加载时造成冲突吧。
范例
我们来做一个使用自定义类型的配置文件范例。
首先新建一个类库项目,我这里以SettingTest2命名该项目,然后创建下面这样一个简单的类:
public class MyClass
{
public DateTime time
{
get
{
return _time;
}
set
{
_time = value;
}
}
private DateTime _time;
public int num
{
get
{
return _num;
}
set
{
_num = value;
}
}
private int _num;
}
由目前所知的情况看来,配置文件不支持泛型集合,所以当我们需要存储自定义类型的集合的时候,就要再创建一个用来存放该自定义类型集合的类:
public class MyClassList
{
public List<MyClass> list
{
get
{
return _list;
}
set
{
_list = value;
}
}
private List<MyClass> _list;
}
这样这个类库项目就搞好了,下面再建立一个控制台项目用于测试。
引入刚才的项目:
创建配置文件,建立一个新属性名为“MyClassList”,在其类型列表中点击最下面的“浏览…”,即可在弹出的对话框中找到刚才我们创建的类:
在程序中编写测试代码:
static void Main(string[] args)
{
//初始化随机数生成对象
Random r = new Random();
//验证是否为空,如果为空的话就初始化一下
if (Settings1.Default.MyClassList == null)
{
Settings1.Default.MyClassList = new SettingTest2.MyClassList();
Settings1.Default.MyClassList.list = new List<SettingTest2.MyClass>();
}
//遍历输出所有项
foreach (var f in Settings1.Default.MyClassList.list)
{
Console.WriteLine(string.Format("{0}:{1}", f.num, f.time));
}
Console.Read();
//添加一条新项,并保存配置
Settings1.Default.MyClassList.list.Add(new SettingTest2.MyClass { num = r.Next(1000), time = DateTime.Now });
Settings1.Default.Save();
}
不断运行、关闭程序,以测试配置文件的使用情况:
很完美哈,再来看看生成的配置文件代码:
很好,跟我们自己XML序列化的没多大区别。
结语
这样一来,我们就能以面向对象的方式操作程序配置,又不用自己费力写序列化代码了,请各位善加利用吧:)
另外,关于泛型类型的支持,我觉得应该也是可以的吧,毕竟自定义类型中包含泛型集合的情况都可以被很好地支持,但没找到设置方法,难道说要手动改写配置文件了?期待高手解答。
下载
转载请遵循此协议:署名 - 非商业用途 - 保持一致
并保留此链接:http://skyd.cnblogs.com/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述