デバッグログに出力するためにコンマ区切りのリストとして吐き出したい処理スクリプトにIDのArrayListを保存しています。物事をループすることなくこれを簡単に取得できる方法はありますか?
編集:.net 2.0以降で利用可能なList(Of T)を指摘してくれたJoelに感謝します。それが利用可能であれば、それは物事をトン簡単にします。
デバッグログに出力するためにコンマ区切りのリストとして吐き出したい処理スクリプトにIDのArrayListを保存しています。物事をループすることなくこれを簡単に取得できる方法はありますか?
編集:.net 2.0以降で利用可能なList(Of T)を指摘してくれたJoelに感謝します。それが利用可能であれば、それは物事をトン簡単にします。
回答:
はい、私は自分の質問に答えていますが、ここではまだ見つけていません。これはかなり巧妙なことだと思いました。
... VB.NETの場合:
String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))
... C#で
string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))
これらの唯一の「落とし穴」は、Option Strictを使用して変換が適切に行われるようにする場合、ArrayListに項目を文字列として格納する必要があることです。
編集:.net 2.0以降を使用している場合は、List(Of String)タイプのオブジェクトを作成するだけで、必要なものを入手できます。これを提起してくれたJoelに感謝します!
String.Join(",", TargetList.ToArray())
これまでの解決策はすべて非常に複雑です。慣用的な解決策は間違いなく次のようになります。
String.Join(",", x.Cast(Of String)().ToArray())
新しいフレームワークバージョンでは、派手なアクロバットは必要ありません。それほど現代的ではないバージョンを想定すると、次のことが最も簡単です。
Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))
mspmspの2番目のソリューションも優れたアプローチですが、AddressOf
キーワードが欠落しているため機能しません。また、Convert.ToString
かなり非効率的であり(多くの不要な内部評価)、Convert
クラスは一般的にあまりきれいに設計されていません。特にそれが完全に冗長であるため、私はそれを避ける傾向があります。
MS.VB.CS.Conversions.ToString
ヘルパー関数を呼び出すため、単純なToString
呼び出しになります。しかし、このメソッドでさえ、(VBキャスト演算子を介するのではなく)直接yを呼び出すことはありません。
何かのようなもの:
String.Join(",", myArrayList.toArray(string.GetType()) );
これは基本的にあなたが知っているループです...
編集
どうですか:
string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
これは、文字列のリストからString.Join()を使用してコンマ区切りの文字列を作成する方法を示す簡単な例です。
List<string> histList = new List<string>();
histList.Add(dt.ToString("MM/dd/yyyy::HH:mm:ss.ffff"));
histList.Add(Index.ToString());
/*arValue is array of Singles */
foreach (Single s in arValue)
{
histList.Add(s.ToString());
}
String HistLine = String.Join(",", histList.ToArray());
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()
または
string.Concat(foo.ToArray().Select(a => a += ",").ToArray())
これは非常に古いため、更新しています。もちろん、string.Joinを使用する必要があります。これを書いている時点では、オプションとして存在していませんでした。