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
:接口
:新建()
where T : class, IDisposable
然后该方法必须至少具有相同的属性,其中您可能在方法和类中对T有不同的约束 请记住,如果课堂上说:
where T : class, IDisposable
然后,该方法必须至少具有相同的where
//这就是问题所在
什么是问题?可能与我得到的编译错误重复此代码SerializableEntity=新的SerializableEntity(serializeObject);怎么了?@mrhands:什么编译器错误?请不要让这成为一个谜。你能为SerializableEntity添加一些代码吗?//这就是问题所在
问题是什么?我得到的编译错误可能与此代码重复SerializableEntity entity=新的SerializableEntity(serializeObject);怎么了?@mrhands:什么编译器错误?请不要让这成为一个难题。你能为SerializableEntity添加一些代码吗?@mrhands下次的建议:在问题中包含确切的编译器错误消息(最好是以文本形式复制)。或者更好:先把错误信息复制到谷歌,看看互联网上怎么说…@mrhands下次的建议:在问题中包括准确的编译器错误信息(最好是复制成文本)。或者更好:先把错误信息复制到谷歌,看看互联网上怎么说。。。