除了使用.net里面提供的内置处理程序来处理我们的自定义节点外,我们还可以通过多种方法,来自己定义处理类处理我们的自定义节点,本文主要介绍通过实现IConfigurationSectionHandler接口的方式来实现自定义处理程序。
首先,我们先在配置文件里面写如下自定义节点:
<!-- 使用自定义节点和上面的自定义处理程序--> <mailServerGroup provider="www.baidu.com"> <mailServer client="http://blog.csdn.net/lhc1105"> <address>13232@qq.com</address> <userName>lhc</userName> <password>2343254</password> </mailServer> <mailServer client="http://www.cnblogs.com/liuhuichao/"> <address>132345232@qq.com</address> <userName>水田如雅</userName> <password>2343453254</password> </mailServer> </mailServerGroup>
然后写对应类进行处理:
namespace MailHandlerClass { public class MailServer { //存储mailServer的子节点(<address>13232@qq.com</address><userName>lhc</userName><password>2343254</password>)的值 //以及client的值 private Hashtable serverNode; //构造函数 public MailServer() { serverNode = new Hashtable(); } public Hashtable ServerNode { get { return serverNode; } } public string client { get { return serverNode["client"] as string; } } public string Address { get { return serverNode["address"] as string; } } public string UserName { get { return serverNode["userName"] as string; } } public string PassWord { get { return serverNode["password"] as string; } } } //对应mailServerGroup public class MailServerConfig : List<MailServer> { //映射provider值 public string Provider { get; set; } } //自定义配置节点mailServerGroup的处理程序 public class MailServerConfigurationHandler : IConfigurationSectionHandler { //section为MailServerGroup节点 public object Create(object parent, object configContext, System.Xml.XmlNode section) { //设置方法返回配置对象,可以是任何类型 MailServerConfig config = new MailServerConfig(); //获取节点的属性信息 config.Provider = section.Attributes["provider"] == null ? "" : section.Attributes["provider"].Value; //获取MailServer节点 foreach (System.Xml.XmlNode child in section.ChildNodes) { MailServer server = new MailServer(); //添加Client属性 if (child.Attributes["client"]!=null) { server.ServerNode.Add("client", child.Attributes["client"].Value); } //获取MailServer下的Name,username,password节点 foreach (System.Xml.XmlNode grandChild in child.ChildNodes) { //添加文本 server.ServerNode.Add(grandChild.Name, grandChild.InnerText); } //将server加入MailServerConfig config.Add(server); } return config; } } }
其实从代码可以看出,自定义处理类的实现思路还是用hashtable来实现key-value的读取与存储+对XML的处理;
之后,我们在配置文件中将上面的类和节点关联起来:
<configuration> <!--定义处理mailServerGroup配置节的类--> <configSections> <section name="mailServerGroup" type="MailHandlerClass.MailServerConfigurationHandler,实现IConfigurationSectionHandler接口"/> <!--【注意】type:指定用来执行如下操作的配置节处理程序类的名称:处理在 name 属性中指定的节或元素中的配置设置。使用以下格式:type=" Fully qualified class name , assembly file name , version , culture , public key token "定义必须匹配程序集引用。--> </configSections>
一定要注意type指定值时参数的位置!!!!!不然会出现加载不上处理程序的错误。
写段代码测试下:
namespace MailHandlerClass { //也可以通过继承ConfigurationSection类来完成 class Program { static void Main(string[] args) { MailServerConfig mailServerConfig = (MailServerConfig)ConfigurationManager.GetSection("mailServerGroup"); //读取节点值 mailServerConfig.ForEach(m => { Console.WriteLine(m.client+";"+m.Address+";"+m.UserName+";"+m.PassWord); }); } } }
额,其实还是建议强转改为as啥的形式。
其实配置文件刚开始看起来是这样的:
但是学完之后,你再看配置文件,就变成了这样的:
以上就是.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点的内容,更多相关内容请关注PHP中文网(www.php.cn)!

char 数组在 C 语言中存储字符序列,声明为 char array_name[size]。访问元素通过下标运算符,元素以空终止符 '\0' 结尾,用于表示字符串终点。C 语言提供多种字符串操作函数,如 strlen()、strcpy()、strcat() 和 strcmp()。

C 语言中符号的使用方法涵盖算术、赋值、条件、逻辑、位运算符等。算术运算符用于基本数学运算,赋值运算符用于赋值和加减乘除赋值,条件运算符用于根据条件执行不同操作,逻辑运算符用于逻辑操作,位运算符用于位级操作,特殊常量用于表示空指针、文件结束标记和非数字值。

在 C 语言中,char 类型在字符串中用于:1. 存储单个字符;2. 使用数组表示字符串并以 null 终止符结束;3. 通过字符串操作函数进行操作;4. 从键盘读取或输出字符串。

C语言中通过转义序列处理特殊字符,如:\n表示换行符。\t表示制表符。使用转义序列或字符常量表示特殊字符,如char c = '\n'。注意,反斜杠需要转义两次。不同平台和编译器可能有不同的转义序列,请查阅文档。

避免 C 语言 switch 语句中 default 引发的错误的策略:使用枚举代替常量,限制 case 语句的值为枚举的有效成员。在最后一个 case 语句中使用 fallthrough,让程序继续执行以下代码。对于没有 fallthrough 的 switch 语句,始终添加一个 default 语句进行错误处理或提供默认行为。

在 C 语言中,char 类型转换可以通过:强制类型转换:使用强制类型转换符将一种类型的数据直接转换为另一种类型。自动类型转换:当一种类型的数据可以容纳另一种类型的值时,编译器自动进行转换。

C语言中没有内置求和函数,需自行编写。可通过遍历数组并累加元素实现求和:循环版本:使用for循环和数组长度计算求和。指针版本:使用指针指向数组元素,通过自增指针遍历高效求和。动态分配数组版本:动态分配数组并自行管理内存,确保释放已分配内存以防止内存泄漏。

C#.NET提供了强大的工具来实现并发、并行和多线程编程。1)使用Thread类可以创建和管理线程,2)Task类提供了更高级的抽象,利用线程池提高资源利用率,3)通过Parallel.ForEach实现并行计算,4)async/await和Task.WhenAll用于并行获取和处理数据,5)避免死锁、竞争条件和线程泄漏,6)使用线程池和异步编程优化性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。