Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拆分字符串并转换为自定义类型_C#_Linq_Lambda - Fatal编程技术网

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

C# 拆分字符串并转换为自定义类型,c#,linq,lambda,C#,Linq,Lambda,我有一个字符串,我想按字符x拆分它,然后将结果字符串数组转换为用户定义的类型。例如,我有一个字符串1800x1200,希望转换为我的类型Layout,如下所示: public class Layout { public Double LongSide { get; set; } public Double ShortSide { get; set; } } 对于类似的内容,不需要lambda表达式或LINQ查询,您可以执行以下操作: string str = "1800x120

我有一个字符串,我想按字符
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])
};

确保从String检查返回的数组的大小,如果字符串包含非数值,也可以考虑使用<代码>双.tryPARSE < /代码>。p> 如果您处理的是字符串值的集合,而不是单个字符串(如:

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();
List List=新列表
{
“1800x1200”,
“1600x1000”,
“1400x800”,
“1200x600”,
};
列表布局列表
=list.Select(r=>r.Split('x'))
.选择(r=>新布局
{
LongSide=double.Parse(r[0]),
ShortSide=double.Parse(r[1])
})
.ToList();

对于字符串集合,您可以使用LINQ获取自定义对象的集合。

对于类似的内容,您不需要lambda表达式或LINQ查询,您可以执行以下操作:

string str = "1800x1200";
string[] array = str.Split('x');
Layout layout = new Layout()
{
    LongSide = double.Parse(array[0]),
    ShortSide = double.Parse(array[1])
};

确保从String检查返回的数组的大小,如果字符串包含非数值,也可以考虑使用<代码>双.tryPARSE < /代码>。p> 如果您处理的是字符串值的集合,而不是单个字符串(如:

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();
List List=新列表
{
“1800x1200”,
“1600x1000”,
“1400x800”,
“1200x600”,
};
列表布局列表
=list.Select(r=>r.Split('x'))
.选择(r=>新布局
{
LongSide=double.Parse(r[0]),
ShortSide=double.Parse(r[1])
})
.ToList();
使用字符串集合,您可以使用LINQ获取自定义对象的集合。

使用一点Lambda(但不太多!):

使用一点Lambda(但不要太多!):

一行解决方案

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

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

我创建的类如下所示:

public class Layout
{
    public Double LongSide { get; set; }
    public Double ShortSide { get; set; }
}
公共类布局
{
公共双长边{get;set;}
公共双短边{get;set;}
公共布局(字符串布局字符串)
{
string[]dimensions=layoutString.Split('x');
this.LongSide=double.Parse(维度[0]);
this.ShortSide=double.Parse(维度[1]);
}
}

并将其命名为:
Layout areaLayout=新布局(“1800x1200”)


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

我创建了如下类:

public class Layout
{
    public Double LongSide { get; set; }
    public Double ShortSide { get; set; }
}
公共类布局
{
公共双长边{get;set;}
公共双短边{get;set;}
公共布局(字符串布局字符串)
{
string[]dimensions=layoutString.Split('x');
this.LongSide=double.Parse(维度[0]);
this.ShortSide=double.Parse(维度[1]);
}
}

并将其命名为:
Layout areaLayout=新布局(“1800x1200”)


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

您认为这有点错误,这称为解析。只需提供您类型的
Parse(string)
方法
Layout
。在那里,您可能可以创建一个实例,拆分字符串,解析为int,初始化字段/属性并返回该实例。您认为这有点错误,这称为解析。只需提供您类型的
Parse(string)
方法
Layout
。在那里,您可能可以创建一个实例、拆分字符串、解析为int、初始化字段/属性并返回该实例。谢谢您的帮助。我已经实现了这种方法,但我正在寻找一种线性解决方案。@Sameer,不要把事情复杂化。如果使用集合,LINQ非常有用。如果只处理单个项目,则不需要LINQ。@Sameer,这是一行代码,看看读取
Layout Layout=new[]{“1800x1200”}.Select(r=>r.Split('x')).Select(r=>new Layout{LongSide=double.Parse(r[0]),ShortSide=double.Parse(r[1])。First()只需将其作为一个扩展,然后就可以执行类似于someString.GetLSRes()的操作;我创建了如下类:
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(维度[0]);this.ShortSide=double.Parse(维度[1]);}
并调用构造函数,如
Layout-areaLayout=new-Layout(“1800X1200”)。我觉得这是最简单的方法。谢谢你的帮助。我已经实现了这种方法,但我正在寻找一种线性解决方案。@Sameer,不要把事情复杂化。如果使用集合,LINQ非常有用。如果只处理单个项目,则不需要LINQ。@Sameer,这是一行代码,看看读取
Layout Layout=new[]{“1800x1200”}.Select(r=>r.Split('x')).Select(r=>new Layout{LongSide=double.Parse(r[0]),ShortSide=double.Parse(r[1])。First()只需将其作为一个扩展,然后就可以执行类似于someString.GetLSRes()的操作;我创建了如下类:
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.Pa