首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有可能构造一个泛型方法,使T是可选的?

有没有可能构造一个泛型方法,使T是可选的?
EN

Stack Overflow用户
提问于 2015-04-10 22:33:10
回答 3查看 905关注 0票数 18

这个问题很难表达,但如果我有:

代码语言:javascript
复制
public class BunnyManager
{
    public Bunny<T> GetBunny<T>(string someJson)
    {
       return new Bunny<T>(someJson);
    }
}

public class Bunny<T>
{
   T parsedJson { get; set; }

    public Bunny<T>(string someJson)
    {
        if (!string.IsNullOrEmpty(someJson))
            parsedJson = ConvertJsonStringToObject<T>(someJson);
    }
}

在某些情况下,我希望获得一个没有任何json的Bunny对象,因为json字符串为空,所以我不关心T是什么。

在这种情况下,我可以创建一个重载或其他东西来完全忽略T,或者我可以调用GetBunny<null>GetBunny<object>吗?

我想知道解决这个问题的正确方法是什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-10 22:38:04

你可以有一个非泛型的bunny类,泛型类继承自这个类。

代码语言:javascript
复制
public class BunnyManager
{
    public Bunny<T> GetBunny<T>(string someJson)
    {
       return new Bunny<T>(someJson);
    }

    public Bunny GetBunny()
    {
       return new Bunny();
    }
}

public class Bunny
{

}

public class Bunny<T> : Bunny
{
   T parsedJson { get; set; }

    public Bunny(string someJson)
    {
        if (!string.IsNullOrEmpty(someJson))
            parsedJson = ConvertJsonStringToObject<T>(someJson);
    }
}
票数 20
EN

Stack Overflow用户

发布于 2015-04-10 22:39:17

您始终可以创建非泛型基类

代码语言:javascript
复制
public class Bunny 
{
}

public class Bunny<T> : Bunny
{
}
票数 4
EN

Stack Overflow用户

发布于 2015-04-10 22:39:56

首先,如果类是泛型的,那么所有成员都被认为是泛型的,不需要泛型参数-甚至不需要构造函数。

其次,如果您不关心T,那么您可以重载GetBunny而不使用T,因为基于不同泛型参数的重载类和方法是允许的(例如,参见Tuple类)。

我为没有参数的泛型找到的最简单的方法是创建一个非泛型基类(abstract class Bunny),泛型继承自这个基类(因此是Bunny<T> : Bunny),这使得它更容易维护,比如不同类型的List<Bunny>。这特别适用于您的情况,因为基类是一个不太具体的实现,因此适合通常的继承模式。

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

https://stackoverflow.com/questions/29564130

复制
相关文章

相似问题

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