首页
学习
活动
专区
圈层
工具
发布

泛型法
EN

Stack Overflow用户
提问于 2013-05-24 06:48:54
回答 2查看 244关注 0票数 1

我有这样的功能

代码语言:javascript
复制
public static void serialize<T>(T serializeObject){
    //this is the trouble
    SerializableEntity<T> entity = new SerializableEntity<T>(serializeObject);
}

我如何在仿制药内部使用仿制药呢?如何做到这一点?

更新

在这里,编译器错误:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-24 07:14:40

您所拥有的代码本身没有什么问题:它编译得很好:

代码语言:javascript
复制
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>声明为:

代码语言:javascript
复制
class SerializableEntity<T> where T : class
{...}

然后,您只需将该约束传递给方法:

代码语言:javascript
复制
public static void serialize<T>(T serializeObject) where T : class
{...}

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

  • : class
  • : struct
  • : SomeBaseType
  • : ISomeInterface
  • : new()
票数 8
EN

Stack Overflow用户

发布于 2013-05-24 07:17:38

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

请记住,如果全班学生说:

代码语言:javascript
复制
where T  : class, IDisposable 

那么该方法必须至少具有相同的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16729148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档