概览
我有一个由逗号分隔的字符串,表示对象,空格表示这些对象的属性:
string sOrderBy = "Column1 ASC, Column2 DESC";
我需要将其转换为 List<OrderByColumn>
其中 OrderByColumn
是:
public class OrderByColumn
{
public string ColumnName { get; set; }
public bool IsAscending { get; set; }
}
问题
sOrderBy.Split(',').Select(x => new OrderByColumn()
{
ColumnName = x.Trim().Split(' ')[0].Trim(),
IsAscending = x.Trim().Split(' ')[1].Trim() == "ASC" ? true : false
}).ToList<OrderByColumn>();
上面的代码可以工作,但是在调用 x.Trim().Split(' ')
时存在一些冗余不止一次。 (另外,我知道代码目前假定 0 和 1 数组值在那里)。
有没有办法消除这种冗余?以某种方式传递 x.Trim().Split(' ')
的结果到一个匿名函数,然后返回一个 OrderByColumn
对象从那里?
我知道我可以使用两个 for/foreach 循环来解决这个问题,但是 linq 和 lambdas 太酷了! :-)
最佳答案
如何在 Select
中引入一个临时变量:
sOrderBy.Split(',').Select(x =>
{
var trimmedSplitted = x.Trim().Split(' ');
return new OrderByColumn()
{
ColumnName = trimmedSplitted[0].Trim(),
IsAscending = (trimmedSplitted[1].Trim() == "ASC")
};
}
).ToList<OrderByColumn>()
关于c# - 使用 linq 和 lambdas 的多分隔字符串到对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12696096/