0

string[]使用するときになぜ使用しなければならないのか知りたいだけですDirectory.GetDirectories()

string[] directories = Directory.GetDirectories("c:\\");

foreach (var dir in directories)
{
     Console.WriteLine(dir);
}

なぜ使えないの?

List<string> _directories = new List<string>();
        _directories = Directory.GetDirectories("c:\\");
4

5 に答える 5

10

GetDirectoriesを返すのでstring[]、基本的に。

とにかく、あなたはすることができます:

List<string> _directories = new List<string>(Directory.GetDirectories("c:\\"));

...また:

List<string> _directories = Directory.GetDirectories("c:\\").ToList();
于 2012-05-09T13:47:31.557 に答える
5

とにかく使用する必要がありますDirectory.EnumerateDirectories()-配列全体をいっぱいにするのではなく、ディレクトリのみを列挙するため-メモリの使用量が少なくなります。

MSDNから:

EnumerateDirectoriesメソッドとGetDirectoriesメソッドは、次のように異なります。EnumerateDirectoriesを使用すると、コレクション全体が返される前に、名前のコレクションの列挙を開始できます。GetDirectoriesを使用する場合、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。したがって、多くのファイルやディレクトリを操作している場合は、EnumerateDirectoriesの方が効率的です。

(本当に塗りつぶされた配列が必要な場合を除く)

編集:

したがって、-質問に具体的に答えるために-List <>タイプを返したい場合は、次のことを行う方がよいでしょう。

var dirs = Directory.EnumerateDirectories("c:\\").ToList();

これにより、変換の「配列」ステップが回避されます。

于 2012-05-09T13:48:39.733 に答える
3

Directory.GetDirectoriesList<T>は、などのジェネリックが導入される前の.Net1.1から存在していました。

于 2012-05-09T13:49:49.840 に答える
0

簡単な答えはパフォーマンスです。事前にいくつのアイテムがあるか(そして検索のために行うか)がわかっている場合は、二重成長戦略のペナルティList<>を使用せずに、通常の配列を事前に割り当てて入力できます。

基本的なstring[]オブジェクトを取得したら、それをリストに簡単にフィードして、本当に必要な場合は追加できます。逆にすると、最も頻繁に使用されるユースケースでパフォーマンスが低下します。

于 2012-05-09T13:50:28.653 に答える
0

それは明らかにメソッドの戻り型だからです。

于 2012-05-09T13:48:04.687 に答える