1

私はこのような機能を持っています

public static void serialize<T>(T serializeObject){
    //this is the trouble
    SerializableEntity<T> entity = new SerializableEntity<T>(serializeObject);
}

ジェネリック内でジェネリックを使用するにはどうすればよいですか? これを達成する方法は?

アップデート

ここでコンパイラエラー:

エラー画像

4

2 に答える 2

8

あなたが持っているコード自体には何も問題はありません:それはうまくコンパイルされます:

class SerializableEntity<T> {
    public SerializableEntity(T obj) { }
}
static class P {
    public static void serialize<T>(T serializeObject) {
        //this is fine...
        SerializableEntity<T> entity =
            new SerializableEntity<T>(serializeObject);
    }
    static void Main() { /*...*/ }
}

したがって、本当の問題は、コンパイラは何と言っているのですか? 最も明白なのは、次のような場合です。

SerializableEntity<T>型 'T' は、ジェネリック型またはメソッド ' 'でパラメーター 'T' として使用するには、参照型でなければなりません

これは「制約」違反です。これが表示されている場合は、制約を追加しserialize<T>て、制約が常に満たされていることをコンパイラーに証明する必要があります。たとえば、次のようSerializableEntity<T>に宣言されている場合:

class SerializableEntity<T> where T : class
{...}

次に、その制約をメソッドに転送するだけです。

public static void serialize<T>(T serializeObject) where T : class
{...}

以下を含む他の制約が可能であることに注意してください。

  • : class
  • : struct
  • : SomeBaseType
  • : ISomeInterface
  • : new()
于 2013-05-24T07:14:40.363 に答える