C# 正在将空格分隔值字符串解析为struct layout

C# 正在将空格分隔值字符串解析为struct layout,c#,C#,对于我们的测试项目Specflow/C,我们有一些测试需要将字符串值(例如1000 500 234 390)解析为具有固定布局的结构。此字符串也是固定布局 目前,当前的实现如下所示: StructObject ConstructFromStringstring值 { var values=value.split“”。选择v=>Convert.ToUInt16v.ToArray; 返回新的StructObject{ member1=值[0], member2=值[1], member3=值[2],

对于我们的测试项目Specflow/C,我们有一些测试需要将字符串值(例如1000 500 234 390)解析为具有固定布局的结构。此字符串也是固定布局

目前,当前的实现如下所示:

StructObject ConstructFromStringstring值 { var values=value.split“”。选择v=>Convert.ToUInt16v.ToArray; 返回新的StructObject{ member1=值[0], member2=值[1], member3=值[2], member4=值[3] }; }
我想知道语言是否提供了某种方法来进行这种解析?或者当前的实现是最好的方法吗?

您可以在StructObject中实现名为ConvertFromString的静态方法,并将所有转换逻辑放入其中。 在这种情况下,您的代码如下所示:

StructObject structObject = StructObject.ConvertFromString(str);
StructObject structObject = str.ConvertToStructObject();
或者另一个变体,您可以使用扩展方法。在这种情况下,您的代码如下所示:

StructObject structObject = StructObject.ConvertFromString(str);
StructObject structObject = str.ConvertToStructObject();
几句话:

转换可能会引发异常,因此如果您不希望发生异常,可以使用UInt16.TryParse方法:

请注意,0将是错误值

您可以通过定义一个接受四个参数或整数数组作为参数的构造函数来稍微改进代码,然后像这样调用它:

return new StructObject(values[0], values[1], values[2], values[3]);


在构造函数中,您将赋值。

这不是转换,而是解析。在调用uint.Parse之前,即使字符本身也没有意义。只需调用UInt16.Parsevalue、CultureInfo.CurrentCulture;。事实上,每个Unicode字符本身都可以被视为UInt16。感谢您的评论,将格式转换为解析。这不是重新措辞的问题。转换不是解析,字符串与结构的布局没有任何关系。这是一种自定义字符串格式,需要自定义代码来解析和提取其部分。如果此字符串中有多行,我们可以使用类似CSV的方法,将StructObject member3映射到索引。如果您使用C7+和AsSpan从字符串中获取ReadOnlySpan,则它可以更好地用于多行,因为需要处理错误丢失的数据并将其转换回。它可以在不分配临时字符串的情况下运行得更快。否则,split会从原始字符串中生成3个新的临时字符串,这些字符串需要是GCdYeah,而不是我所要的。这只是将代码转移到其他地方:-谢谢你的努力。我想我只是在寻找一些语法上的甜点,有点像元组,但是对于类/结构成员。