.NET Framework : 4.7.2 IDE : Visual Studio Community 2019 OS : Windows 10 x64 typesetting : Markdown blog : blog.csdn.net/yushaopu github : github.com/GratefulHeartCoder
博文起因
当初我学习Dictionary的时候,老师讲了很多属性、方法,关于怎么遍历、查找和初始化,但是迷惑于它的实际用处,整天初始化、创建和查找,解决一些在理想世界中才能出现的问题,很是没有动力。
应用背景
在串口编程中,有几个参数必须需要配置,比如串口号、波特率,数据位等。为了工作的快捷,人们会提出将配置参数保存为一个文件,在下次程序启动时,自动提取出配置参数进行配置的需求。我是用的XML文件保存配置参数。
XML文件
<?xml version="1.0" encoding="utf-8"?>
<portConfigure>
<PortName>COM4
</PortName>
<BaudRate>115200
</BaudRate>
<DataBits>8
</DataBits>
<StopBits>1
</StopBits>
<Parity>None
</Parity>
</portConfigure>
思考
问题出现了。PortName端口号、BaudRate波特率、DataBits数据位,直接读取XML中数据就可以交给C#进行赋值,但是StopBits停止位和Parity校验位在XML保存的数据是为了让人能够轻易看懂,然而直接将其交给C#进行赋值,程序就会报类型不匹配的错误。于是乎,作为桥梁的字典Dictionary就需要出现了。
XML文件中的参数作为字典的键,赋值的时,通过键(人易识别的数据)找到对应的值(类型匹配的机器数据)进行赋值,就可以解决类型不匹配的问题了。
code
using System
;
using System
.Collections
.Generic
;
using System
.Xml
;
using System
.IO
.Ports
;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args
)
{
Console
.WriteLine("正在读取上次保存的配置参数");
string xmlFileName
= "portArgsFile.xml";
XmlDocument xml
= new XmlDocument();
xml
.Load(xmlFileName
);
XmlElement portConfigure
= xml
.DocumentElement
;
var parityDictionary
= new Dictionary<String, Parity>() {
{ "Even",Parity
.Even
},
{ "Mark",Parity
.Mark
},
{ "None",Parity
.None
},
{ "Odd",Parity
.Odd
},
{ "Space",Parity
.Space
}
};
var stopBitsDictionary
= new Dictionary<String, StopBits>() {
{ "1",StopBits
.One
},
{ "1.5",StopBits
.OnePointFive
},
{ "2",StopBits
.Two
}
};
string portName
= portConfigure
.SelectSingleNode("PortName").InnerText
;
int baudRate
= Convert
.ToInt32(portConfigure
.SelectSingleNode("BaudRate").InnerText
);
Parity parity
= parityDictionary
[portConfigure
.SelectSingleNode("Parity").InnerText
];
int dataBits
= Convert
.ToInt32(portConfigure
.SelectSingleNode("DataBits").InnerText
);
StopBits stopBits
= stopBitsDictionary
[portConfigure
.SelectSingleNode("StopBits").InnerText
];
Console
.WriteLine("配置参数读取成功");
Console
.ReadKey();
}
}
}
result
正在读取上次保存的配置参数
配置参数读取成功
感想
写应用经验方向的博文,是希望通过我的实践历程告诉新手:要好好学习基础知识,这些基础知识在未来的工作中是切实可用的,坚定信心,不要迷茫。加油!
resource
[文档] docs.microsoft.com/zh-cn/dotnet/csharp[规范] github.com/dotnet/docs/tree/master/docs/standard/design-guidelines[源码] referencesource.microsoft.com [平台] www.csdn.net[ IDE ] visualstudio.microsoft.com/zh-hans[.NET Core] dotnet.github.io
感恩曾经帮助过 心少朴 的人。 C#优秀,值得学习。.NET Core具有跨平台的能力,值得关注。 Console,WinForm,WPF,ASP.NET,Azure WebJob,WCF,Unity3d,UWP可以适当地了解。 注:此文是自学笔记所生,质量中下等,故要三思而后行。新手到此,不可照搬,应先研究其理象数,待能变通之时,自然跳出深坑。