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() { /*...*/ }
}

所以真正的问题是:编译器说什么?最明显的一个是如果它说的是:

类型“T”必须是引用类型才能在泛型类型或方法“”中用作参数“T SerializableEntity<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 回答
1

您可能在方法和类中对 T 有不同的约束。

请记住,如果班级说:

where T  : class, IDisposable 

然后该方法必须至少具有相同的where

于 2013-05-24T07:17:38.327 回答