有时我有这种代码,任何建议,以提高可读性结果 [0],结果[1] ...事件结果命名解析字符串并分配价值
var productData = "Egg 1.24 1.36";
var result = productData..Split(new char[] { ' ' });
var product = new
{
Name = result[0],
BuyPrice = result[1],
SellPrice = result[2],
};
有时我有这种代码,任何建议,以提高可读性结果 [0],结果[1] ...事件结果命名解析字符串并分配价值
var productData = "Egg 1.24 1.36";
var result = productData..Split(new char[] { ' ' });
var product = new
{
Name = result[0],
BuyPrice = result[1],
SellPrice = result[2],
};
这可能是矫枉过正,但您可以使用基于C# 7和ValueTuple
的扩展方法来立即命名您的值。例如:
public static class StringExtensions
{
public static ValueTuple<string, string, string> Split(this string input, string delimiter)
{
var values = input.Split(new[] { delimiter }, StringSplitOptions.None);
return (values[0], values[1], values[2]);
}
}
然后使用它像:
var (name, buyPrice, sellPrice) = productData.Split(" ");
Console.WriteLine(name);
编辑:其实,还有一个更聪明的方法。只要写一个扩展方法来解构的数组:
public static class ArrayExtensions
{
public static void Deconstruct<T>(this T[] values, out T item1, out T item2, out T item3)
{
item1 = values[0];
item2 = values[1];
item3 = values[2];
}
}
现在你可以使用原来的string.Split
并分配像第一个例子中的值:
var (name, buyPrice, sellPrice) = productData.Split(new[] { " " }, StringSplitOptions.None);
它是过度杀毒。但还是一个很好的建议,也许我可以在其他地方使用它。 – MichaelMao
@MichaelMao我只是想到了一点小小的矫枉过正/更多可重复使用的技巧(请参阅编辑) –
谢谢。我会将第二个添加到我的项目中:D – MichaelMao
创建扩展方法String类将做分割,并返回ProductData对象类
public static YourProductClass GetProductFromString(this string CompinedString)
{
// Do You Splitting Stuff Here and Assign The Values From String To NewProduct
return NewProduct;
}
然后在你的代码
var ProductData = "Egg 1.24 1.36".GetProductFromString();
'productDataParts'或者沿着那条线? – oerkelens
@oerkelens零件是好建议!他妈的好! – MichaelMao
您也可以尝试使用带有命名捕获的正则表达式。这样你就不必用数字来引用各个部分,而是用名字来代替。尽管这只是简单的字符串分裂可能是矫枉过正的。 – fshauge