IdのArrayListを処理スクリプトに保存しています。このスクリプトは、デバッグログに出力するためのコンマ区切りリストとして吐き出します。物事をループせずにこれを簡単に取得できる方法はありますか?
編集:.net 2.0以降で利用可能なList(Of T)を指摘してくれたJoelに感謝します。 TONSを使用できる場合、これによりTONSが簡単になります。
はい、私は自分の質問に答えていますが、ここではまだ見つけていないので、これはかなり滑らかなものだと思いました。
... 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
クラスは通常あまりきれいに設計されていません。特に完全に冗長なので、私はそれを避ける傾向があります。
何かのようなもの:
String.Join(",", myArrayList.toArray(string.GetType()) );
これは基本的にループを知っています...
[〜#〜] edit [〜#〜]
どうですか:
string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
string.Join(" ,", myArrayList.ToArray());
これは.net framework 4.5で動作します
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()
または
string.Concat(foo.ToArray().Select(a => a += ",").ToArray())
これは非常に古いため、更新しています。もちろん、string.Joinを使用する必要があります。執筆時点ではオプションとして存在していませんでした。
以下は、文字列のリストから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());