のにっき

【C#】色々な型の複数要素を1つの文字列に「1行で」変換する方法まとめ

色々な場面で必要になる文字列変換ですが、
まとめたい型ごとにやり方は異なってきます。
今回は、色々な型のやり方をこのページにまとめたいと思います。
※なるべく1行で完結できる方法をまとめてます

様々な型の文字列化

配列、リスト

string setValue = "";
//配列を文字列に結合
string[] a_Get = new string[10];
setValue = String.Join("\r\n", a_Get);
//リストを文字列に結合
List<string> l_Get = new List<string>();
setValue = String.Join("\r\n", l_Get);

配列やリストは、「 String.Join( "区切り文字", "まとめるリストや配列" )
の関数を使えば1行で完結できます。

Dictionary

//Dictionaryを文字列に結合
Dictionary<string, string> dic_Get = new Dictionary<string, string>();
setValue = String.Join("\r\n", dic_Get.Keys);   //全てのKeyを文字列に
setValue = String.Join("\r\n", dic_Get.Values); //全てのValueを文字列に

Dictionaryは、キーと値は「 Dic変数名.Keys 」「 Dic変数名.Values
で配列としてまとめて取得することが出来ます。あとは、配列と同じく
Join関数を使えば1行で完結できます。

自作クラス等のクラス内変数

/*******************************************
   コピー対象の自作クラス
********************************************/
public class TestClass
{
    public int _Id;
    public string _Name;
    public string[] _Array01;
}

/*******************************************
   文字列化方法
********************************************/
List<TestClass> lcls_Get;
string setValue = "";
//string型メンバ変数を取得
setValue = String.Join("\r\n", lcls_Get.Select(x => x._Name));
//int型メンバ変数を取得
setValue = String.Join("\r\n", lcls_Get.Select(x => x._Id.ToString()));
//配列メンバ変数を取得
setValue = String.Join("\r\n", lcls_Get.Select(x => String.Join("\r\n", x._Array01)));

自作クラスのリストから変数を抜き取る場合は、
結構For文を使いがちですが、LINQを使えば1行で完結できます。
細かな条件分岐もWhereでできますので、LINQをお勧めします。

記入欄とかに次々追加する時

List<string> l_Get = new List<string>();
for (int iRow = 0; iRow < l_Get.Count; iRow++)
{
    TextBox.text += l_Get[iRow] + "\r\n";
}

上記の感じで、for文で1つの文字列化する時にありがちな書き方です。
この書き方だと大きな問題が!?
末尾に要らない改行文字が残っちゃいます。。。

これを取り除くために判定を書くのもいいですが、1行でスマートに行きましょう!

List<string> l_Get = new List<string>();
for (int iRow = 0; iRow < l_Get.Count; iRow++)
{
    TextBox.text = (TextBox.text + l_Get[iRow] + "\r\n").Trim();
}

これで解決!手順は簡単。
毎回 Trim() したら先頭・末尾に余計な文字は無くなるで!
の法則です。長年のモヤモヤだったのですが、最近発見して驚愕しました。。。

以上です。
文字列化は常に付きまとう事なので、
なるべく少ないコードで見やすく組み込みたいですね。