命名解析字符串并赋值

时间:2017-07-08 13:36:15

标签: c# asp.net refactoring

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);

答案 2 :(得分:0)

在将进行拆分并返回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();