2017-07-08 23 views
0

時々私は[1] [0]、その結果、結果の可読性 を改善するための任意のアドバイスをこの種のコードを持っている...イベント結果解析文字列のネーミングと割り当てる値

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

@ererkelensパーツは良い助言です!...クソ良い! – 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

ありがとうございました。私は私のプロジェクトに2番目を追加します:D – MichaelMao

1

の命名私はあなたがどのようにproductDataを取得するのではありませんが、おそらくjsonとして取得することは可能ですか?それは、それを分割する代わりに可読性を向上させ、位置に基づいて文字列を取得します。

+0

ソースは文字列です – MichaelMao

0

はどのれる文字列クラスの拡張メソッドを作成します。分割を行うとProductDataクラスのオブジェクトあなたのコードで次に

public static YourProductClass GetProductFromString(this string CompinedString) 
{ 
    // Do You Splitting Stuff Here and Assign The Values From String To NewProduct 
    return NewProduct; 
} 

01を返します。
var ProductData = "Egg 1.24 1.36".GetProductFromString(); 
関連する問題