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