对于我们的测试项目(Specflow/C#(,我们有一些测试需要将值的string
(例如1000 500 234 390
(解析为具有固定布局的结构。该string
也是固定布局的。
目前的实施情况如下:
StructObject ConstructFromString(string value)
{
var values = value.split(' ').Select(v => Convert.ToUInt16(v)).ToArray();
return new StructObject{
member1 = values[0],
member2 = values[1],
member3 = values[2],
member4 = values[3]
};
}
我想知道语言是否提供了某种方式来进行这种解析?或者目前的实施方式是可能的最佳方式?
少数备注:
转换可能会抛出异常,所以如果您不希望这样,可以使用UInt16.TryParse
方法:
var values = value.split(' ').Select(v => UInt16.TryParse(v, out short res) ? res : 0).ToArray();
注意,0
将是"错误"值。
您可以通过定义一个接受四个参数或int数组作为参数的构造函数来稍微改进代码,然后将其调用为:
return new StructObject(values[0], values[1], values[2], values[3]);
或
return new StructObject(values);
在构造函数中,您将赋值。
您可以在名为">ConvertFromString"的StructObject中实现静态方法,并将所有转换逻辑放入其中。在这种情况下,您的代码将看起来像:
StructObject structObject = StructObject.ConvertFromString(str);
或者另一种变体,您可以使用扩展方法。在这种情况下,您的代码将看起来像:
StructObject structObject = str.ConvertToStructObject();