2009-06-08 8 views
1

プログラムのプラグインを作成していますが、プログラム内のオブジェクトにキー文字列と値を持つ各オブジェクトに「ユーザー文字列」を追加することができます文字列。しかし、場合によっては、単一の値ではなくプリミティブ型の配列を格納する必要があります。だから、値の配列を文字列に変換し、その後同じ文字列を元の値の配列に戻すのが最も簡単な方法は何ですか?プリミティブの配列を単一の文字列に変換する

答えて

1

あなたは、各項目の変換を実行するために、カスタムデリゲートを渡して、区切られた文字列からに/あなたのコレクションを変換する拡張メソッドのカップルを作成することができます。

public static string ToDelimitedString<T> 
    (this IEnumerable<T> source, Func<T, string> converter, string separator) 
{ 
    return string.Join(separator, source.Select(converter).ToArray()); 
} 

public static IEnumerable<T> FromDelimitedString<T> 
    (this string source, Func<string, T> converter, params string[] separator) 
{ 
    return source.Split(separator, StringSplitOptions.None).Select(converter); 
} 

そして、ここでは、使用のいくつかの例であり、 :

int[] source1 = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 

string txt1 = source1.ToDelimitedString(x => x.ToString(), "|"); 
Console.WriteLine(txt1); // "1|2|3|4|5|6|7|8|9|10" 

int[] dest1 = txt1.FromDelimitedString(x => int.Parse(x), "|").ToArray(); 
Console.WriteLine(source1.SequenceEqual(dest1)); // "True" 

// ... 

string[] source2 = new[] { "Fish & Chips", "Salt & Pepper", "Gin & Tonic" }; 

string txt2 = source2.ToDelimitedString(x => HttpUtility.UrlEncode(x), "&"); 
Console.WriteLine(txt2); // "Fish+%26+Chips&Salt+%26+Pepper&Gin+%26+Tonic" 

var dest2 = txt2.FromDelimitedString(x => HttpUtility.UrlDecode(x), "&"); 
Console.WriteLine(source2.SequenceEqual(dest2)); // "True" 
0

フォームにループスルー、あなたが使用されるプリミティブ型を知ることができますと仮定すると、 (または任意のもの)を区切り文字として使用して単一文字列を作成した後、String.Split()メソッドを使用して文字列を文字列配列に分割し、最後にその配列をループして元の配列を再現する。

0

スプリット/ジョインは良いですが、あなたの文字列にあればどうすれば 区切り記号にするのですか? 私はいくつかのエンコーディング、例えばBase64を使うことを提案します。

+0

あなたは当然です – tekBlues

関連する問題