拆分字符串并转换为自定义类型
本文关键字:自定义 类型 转换 串并 字符 字符串 拆分 | 更新日期: 2023-09-27 18:12:35
我有一个字符串,我想通过字符x
分割,然后想将结果字符串数组转换为用户定义的类型。例如,我有字符串1800x1200
,并希望转换为我的类型Layout
,如下所示:
public class Layout
{
public Double LongSide { get; set; }
public Double ShortSide { get; set; }
}
您不需要lambda表达式或LINQ查询,您可以这样做:
string str = "1800x1200";
string[] array = str.Split('x');
Layout layout = new Layout()
{
LongSide = double.Parse(array[0]),
ShortSide = double.Parse(array[1])
};
确保检查从Split返回的数组的大小,如果字符串可以包含非数字值,也考虑使用double.TryParse
。
LINQ在处理字符串值的集合时非常有用,而不是像
这样处理单个字符串:List<string> list = new List<string>
{
"1800x1200",
"1600x1000",
"1400x800",
"1200x600",
};
List<Layout> layoutList
= list.Select(r => r.Split('x'))
.Select(r => new Layout
{
LongSide = double.Parse(r[0]),
ShortSide = double.Parse(r[1])
})
.ToList();
对于字符串集合,您可以使用LINQ来获取自定义对象的集合。
我创建了如下的类:
public class Layout { public double LongSide { get; set; } public double ShortSide { get; set; } public Layout(string layoutString) { string[] dimensions = layoutString.Split('x'); this.LongSide = double.Parse(dimensions[0]); this.ShortSide = double.Parse(dimensions[1]); } }
并调用为:Layout areaLayout = new Layout("1800x1200");
我觉得这是最简单的方法。
使用一点Lambda(但不多):
string input = "1800x1200";
var sizes = input
.Split('x')
.ToList()
.Select(d => double.Parse(d));
Layout layout = new Layout
{
LongSide = sizes.First(),
ShortSide = sizes.Last()
};
一个简单的解决方案?
var layout = input
.Split('x')
.Select(double.Parse)
.GroupBy(x => 0)
.Select(g => new Layout { LongSide = g.ElementAt(0), ShortSide = g.ElementAt(1) })
.Single();