1

私はジェネリッククラスと制約を扱っています。以下は私のクラスです。

public class GenericList<T> where T : new()
    {

        private Node head;

        // constructor 
        public GenericList()
        {
            head = null;
        }

    }

整数でオブジェクトを作成すると正常に動作します

GenericList<int> list = new GenericList<int>();

しかし、文字列を試してみると、次のコンパイル時エラーが発生します。

GenericList<string> list1 = new GenericList<string>();

「string」は、ジェネリック型またはメソッド「GenericTest.GenericList」でパラメーター「T」として使用するために、パブリックパラメーターなしのコンストラクターを持つ非抽象型である必要があります。また、カスタムクラスのように参照パラメーターを渡した場合も正常に動作します。

文字列の問題は何ですか?

4

2 に答える 2

3

文字列クラスには、パラメーターなしのパブリック コンストラクターがありません。そのため、new()制約は適用されません。

型パラメーターの制約を読み取る(C# プログラミング ガイド) :

ここで T : new()

型引数には、パラメーターなしのパブリック コンストラクターが必要です。他の制約と一緒に使用する場合、 new() 制約は最後に指定する必要があります。

于 2012-11-30T07:04:13.287 に答える
2

タイプがimmutableStringであるため、パラメーターのない public コンストラクターを持つことは無意味です。つまり、このコンストラクターがある場合は、空の文字列オブジェクトを作成する必要があり、作成後に変更できないため、それは愚かなことです。StringString

于 2012-11-30T07:32:14.643 に答える