自分も含めてですが、何かしらの文字列を入れた配列やコレクションをreturnするメソッドを書く場合、とりあえず処理した各要素を保存するインスタンス変数を作りがちです。
例えばこんな感じに。
DirectoryInfoクラスを利用しディレクトリの情報からファイル名を取得します。
*エラー処理は省略
public List<string> ReturnData() { string path = @""; DirectoryInfo diInfo = new DirectoryInfo(path); DirectoryInfo[] diInfomations = diInfo.GetDirectories(); List<string> data = new List<string>(); foreach (var directions in diInfomations) { data.Add(directions.Name); } return data; }
DirectoryInfoクラスのオブジェクトを作りディレクション情報をDirectoryInfo[]型として取得します。
string path = @""; DirectoryInfo diInfo = new DirectoryInfo(path); DirectoryInfo[] diInfomations = diInfo.GetDirectories();
そして、foreachで取得した複数のファイル名をreturnする際に、一時的にファイル名を保存するList
しかし、無駄なインスタンス変数を書くコーディングは行が多く見にくかったり、無駄にメモリを使ってしまうことから推奨はされません。
より見やすく効率が良いコードにするには、returnにList
public IEnumerable<string> ReturnData1() { string path = @""; DirectoryInfo diInfo = new DirectoryInfo(path); IEnumerable<DirectoryInfo> diInfomations = diInfo.EnumerateDirectories(); IEnumerable<string> names = diInfomations.Select(s => s.Name); return names; }
DirectoryInfoクラスを宣言するところまでは同じです。
違いはIEnumerable
また、上記のコードは説明の都合上Selectメソッドの部分を複数行に分けましたが、普通は1行ですませます。
public IEnumerable<string> ReturnData2() { string path = @""; DirectoryInfo diInfo = new DirectoryInfo(path); IEnumerable<string> names = diInfo.EnumerateDirectories().Select(s => s.Name); return names; }