2017-07-08 39 views
0

有时我有这种代码,任何建议,以提高可读性结果 [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

'productDataParts'或者沿着那条线? – oerkelens

+0

@oerkelens零件是好建议!他妈的好! – MichaelMao

+0

您也可以尝试使用带有命名捕获的正则表达式。这样你就不必用数字来引用各个部分,而是用名字来代替。尽管这只是简单的字符串分裂可能是矫枉过正的。 – fshauge

回答

1

这可能是矫枉过正,但您可以使用基于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); 
+0

它是过度杀毒。但还是一个很好的建议,也许我可以在其他地方使用它。 – MichaelMao

+0

@MichaelMao我只是想到了一点小小的矫枉过正/更多可重复使用的技巧(请参阅编辑) –

+0

谢谢。我会将第二个添加到我的项目中:D – MichaelMao

1

的命名我不知道如何获得productData,但有可能将它作为json获取?这将提高可读性,而不是分割它,并根据位置获取字符串。

+0

来源是一个字符串 – MichaelMao

0

创建扩展方法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();