【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() したら先頭・末尾に余計な文字は無くなるで!
の法則です。長年のモヤモヤだったのですが、最近発見して驚愕しました。。。
以上です。
文字列化は常に付きまとう事なので、
なるべく少ないコードで見やすく組み込みたいですね。