将自定义分隔字符串转换为列表<;myClass>;
本文关键字:lt myClass gt 列表 自定义 分隔 字符串 转换 | 更新日期: 2023-09-27 18:23:58
如何打开:
string x = "key:value|key:value|key:value|key:value";
进入这个?
List<myClass> listObj;
myClass定义:
public class myClass
{
public string keyName { get; set; }
public string keyValue { get; set; }
}
必须有一种使用LINQ或其他东西的方法:)提前感谢!
*注意*我应该补充一点,我知道如何进行拆分和循环,但必须有更好的方法:)
这将需要单独的ToList()
调用,但我喜欢查询语法的声明性:
from s in x.Split('|')
let parts = s.Split(':')
select new myClass {
keyName = parts[0],
keyValue = parts[1]
}
或者你可以使用流利的语法:
x.Split('|')
.Select(s => {
var parts = s.Split(':');
return new myClass {
keyName = parts[0],
keyValue = parts[1]
};
}).ToList()
好吧,既然你真的想避免分裂和循环。。。
public List<MyClass> Parse(string base, string workingName, string workingValue,
bool processingName = true,
List<MyClass> workingList = null, int index = 0)
{
if (workingList == null)
workingList = new List<MyClass>();
if (index >= base.Length)
{
return workingList;
}
if (base[index] = '|')
{
workingList.Add(new MyClass { keyName = workingName, keyValue = workingValue });
return Parse(base, "", "", true, workingList, index + 1);
}
else if (base[index] = ':')
{
return Parse(base, workingName, "", false, workingList, index + 1);
}
else if (processingName)
{
return Parse(base, workingName + base[index], "", processingName, workingList, index + 1);
}
else
{
return Parse(base, workingName, workingValue + base[index], processingName, workingList, index + 1);
}
}
但是,出于对你所珍视的东西的热爱,请不要做任何类似的事情(是的,这是未经测试的手写代码,所以可能存在错误——只是开个回避的玩笑)。
如果您更喜欢使用自定义类而不是Dictionary ,请执行此操作
var result = from y in x.Split('|')
let obj = y.Split(':')
select new myClass{keyName = obj[0], keyValue = obj[1]};
var list = result.ToList();