我有这样的功能
public static void serialize<T>(T serializeObject){
//this is the trouble
SerializableEntity<T> entity = new SerializableEntity<T>(serializeObject);
}
我怎样才能在泛型内部使用泛型呢?如何做到这一点?
更新
这里是编译器错误:
您拥有的代码本身没有任何问题:编译得很好:
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()
您可能在方法和类中对 T 有不同的约束。
请记住,如果班级说:
where T : class, IDisposable
然后该方法必须至少具有相同的where