拆分字符串并转换为自定义类型

时间:2014-07-11 14:53:10

标签: c# linq lambda

我有字符串,我希望按字符x拆分,然后想将结果字符串数组转换为用户定义的类型。例如,我有字符串1800x1200,并希望转换为我的类型Layout,如下所示:

public class Layout
{
    public Double LongSide { get; set; }
    public Double ShortSide { get; set; }
}

4 个答案:

答案 0 :(得分:3)

你不需要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获取自定义对象的集合。

答案 1 :(得分:1)

使用一点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()
};

答案 2 :(得分:1)

我创建了如下课程:

  

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");

我觉得这是最简单的方法。请提供您的意见。

答案 3 :(得分:0)

单线解决方案?

var layout = input
    .Split('x')
    .Select(d => double.Parse(d))
    .GroupBy(x => 0)
    .Select(g => new Layout { LongSide = g.ElementAt(0), ShortSide = g.ElementAt(1) })
    .Single();