3

質問に答えている間、私はこれに出くわしました

StringCollection sc = new StringCollection();

sc.Add("Foo");

しかし、これは次のように書くことができます

StringCollection sc = new StringCollection() {"Foo"};

そしてこれは書ききれない

StringCollection sc = new StringCollection() {new string[] {"Foo"} };

つまり、Addメソッドが呼び出され、呼び出されAddRangeません。

オブジェクトの作成中にデフォルトのメソッドを呼び出すというこの機能を持つクラスを作成するにはどうすればよいですか?

4

2 に答える 2

5

これはCollection Initializerと呼ばれます。クラスはIEnumerableを実装し、パブリックAddメソッドを持つ必要があります。

クラスは複数のAddメソッドを持つことができます。

public class MyCollection : IEnumerable
{
    public void Add(string item) { ... }

    public void Add(string[] items) { ... }

    ...
}
于 2012-08-17T08:16:00.967 に答える
2

コードはコレクション初期化子です: http://msdn.microsoft.com/en-us/library/bb384062.aspx

コレクション初期化子を使用すると、IEnumerable を実装するコレクション クラスを初期化するときに、1 つ以上の要素初期化子を指定できます。要素初期化子は、単純な値、式、またはオブジェクト初期化子にすることができます。コレクション初期化子を使用すると、ソース コードでクラスの Add メソッドへの複数の呼び出しを指定する必要がなくなります。コンパイラが呼び出しを追加します。

「追加」への呼び出しは、コンパイラによって生成されます。したがって、独自の C# コンパイラを作成しない限り、"AddRange" を呼び出す動作をカスタマイズすることはできません。

于 2012-08-17T08:17:21.007 に答える