泛型方法中的泛型方法

mrh*_*nds 1 c# generics

我有这样的功能

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

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

UPDATE

这里编译错误:

错误图片

Mar*_*ell 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() { /*...*/ }
}
Run Code Online (Sandbox Code Playgroud)

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

类型'T'必须是引用类型才能在泛型类型或方法' SerializableEntity<T>'中用作参数'T '

这是一种"约束"违规; 如果这是您所看到的,则需要添加约束以serialize<T>向编译器证明总是满足约束.例如,if SerializableEntity<T>声明为:

class SerializableEntity<T> where T : class
{...}
Run Code Online (Sandbox Code Playgroud)

然后你只需将该约束转移到方法:

public static void serialize<T>(T serializeObject) where T : class
{...}
Run Code Online (Sandbox Code Playgroud)

请注意,其他约束是可能的,包括:

  • : class
  • : struct
  • : SomeBaseType
  • : ISomeInterface
  • : new()