C# 泛型方法中的泛型方法

C# 泛型方法中的泛型方法,c#,generics,C#,Generics,我有这样的功能 public static void serialize<T>(T serializeObject){ //this is the trouble SerializableEntity<T> entity = new SerializableEntity<T>(serializeObject); } publicstaticvoidserialize(T serializeObject){ //这就是问题所在 Serializ

我有这样的功能

public static void serialize<T>(T serializeObject){
    //this is the trouble
    SerializableEntity<T> entity = new SerializableEntity<T>(serializeObject);
}
publicstaticvoidserialize(T serializeObject){
//这就是问题所在
SerializableEntity=新的SerializableEntity(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() { /*...*/ }
}
class SerializableEntity{
公共序列化实体(T obj){}
}
静态P类{
公共静态void序列化(T serialize对象){
//这很好。。。
序列化实体=
新的SerializableEntity(SerializableObject);
}
静态void Main(){/*…*/}
}
所以真正的问题是:编译器说什么?最明显的是,如果它说的是:

类型“T”必须是引用类型,才能将其用作泛型类型或方法“
SerializableEntity
”中的参数“T”

这是一种违反“约束”的行为;如果这就是您看到的,那么您需要将约束添加到
serialize
,以向编译器证明约束始终得到满足。例如,如果
SerializableEntity
声明为:

class SerializableEntity<T> where T : class
{...}
class SerializableEntity其中T:class
{...}
然后,只需将该约束转移到方法:

public static void serialize<T>(T serializeObject) where T : class
{...}
publicstaticvoid序列化(T serializeObject),其中T:class
{...}
请注意,其他约束也是可能的,包括:

  • :类
  • :结构
  • :SomeBaseType
  • :接口
  • :新建()
您拥有的代码本身并没有错:编译起来很好:

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() { /*...*/ }
}
class SerializableEntity{
公共序列化实体(T obj){}
}
静态P类{
公共静态void序列化(T serialize对象){
//这很好。。。
序列化实体=
新的SerializableEntity(SerializableObject);
}
静态void Main(){/*…*/}
}
所以真正的问题是:编译器说什么?最明显的是,如果它说的是:

类型“T”必须是引用类型,才能将其用作泛型类型或方法“
SerializableEntity
”中的参数“T”

这是一种违反“约束”的行为;如果这就是您看到的,那么您需要将约束添加到
serialize
,以向编译器证明约束始终得到满足。例如,如果
SerializableEntity
声明为:

class SerializableEntity<T> where T : class
{...}
class SerializableEntity其中T:class
{...}
然后,只需将该约束转移到方法:

public static void serialize<T>(T serializeObject) where T : class
{...}
publicstaticvoid序列化(T serializeObject),其中T:class
{...}
请注意,其他约束也是可能的,包括:

  • :类
  • :结构
  • :SomeBaseType
  • :接口
  • :新建()

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

请记住,如果课堂上说:

where T  : class, IDisposable 

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

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

请记住,如果课堂上说:

where T  : class, IDisposable 

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

//这就是问题所在
什么是问题?可能与我得到的编译错误重复此代码SerializableEntity=新的SerializableEntity(serializeObject);怎么了?@mrhands:什么编译器错误?请不要让这成为一个谜。你能为SerializableEntity添加一些代码吗?
//这就是问题所在
问题是什么?我得到的编译错误可能与此代码重复SerializableEntity entity=新的SerializableEntity(serializeObject);怎么了?@mrhands:什么编译器错误?请不要让这成为一个难题。你能为SerializableEntity添加一些代码吗?@mrhands下次的建议:在问题中包含确切的编译器错误消息(最好是以文本形式复制)。或者更好:先把错误信息复制到谷歌,看看互联网上怎么说…@mrhands下次的建议:在问题中包括准确的编译器错误信息(最好是复制成文本)。或者更好:先把错误信息复制到谷歌,看看互联网上怎么说。。。