在VB.NET中,如何将以下字符串转换为某种键/值类型,如Hashtable,Dictionary等?
"Name=Fred;Birthday=19-June-1906;ID=12345"
Run Code Online (Sandbox Code Playgroud)
我想提取生日或ID,而不必将字符串拆分为数组.
编辑:如果字符串的格式稍后更改,我宁愿不将字符串拆分为数组.我无法控制字符串.如果有人切换订单或添加另一个元素怎么办?
我目前无法对此进行测试,缺少VB编译器,但以下解决方案也应该可行,并且它具有不需要显式循环的优点.它使用Linq方法ToDictionary和两个嵌套Split操作:
Dim s = "Name=Fred;Birthday=19-June-1906;ID=12345"
Dim d = s.Split(";"c).Select(Function (kvp) kvp.Split("="c)) _
.ToDictionary( _
Function (kvp) kvp(0), _
Function (kvp) kvp(1))
Run Code Online (Sandbox Code Playgroud)
首先,我们拆分外部分隔符(即分号).从结果数组中,我们再次分裂选择,这次是=.生成的数组数组通过指定第一项成为键而第二项成为值(标识符kvp代表"键值对")转换为字典.
由于我无法检查确切的VB语法,以上可能包含细微的错误,这里是等效的C#代码(测试正确性):
var s = "Name=Fred;Birthday=19-June-1906;ID=12345";
var d = s.Split(';').Select(kvp => kvp.Split('='))
.ToDictionary(kvp => kvp[0], kvp => kvp[1]);
Run Code Online (Sandbox Code Playgroud)