泛型方法中的泛型方法

时间:2013-05-24 06:48:55

标签: c# generics

我有这样的功能

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

如何在泛型中使用泛型?如何做到这一点?

更新

编译错误:

Error image

2 个答案:

答案 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'必须是引用类型才能在泛型类型或方法'SerializableEntity<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()

答案 1 :(得分:1)

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

请记住,如果班级说:

where T  : class, IDisposable 

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