返回类型实现类的列表

时间:2017-03-15 12:38:29

标签: c# generics polymorphism

我在重构一些从Web服务返回JSON数据的代码时遇到了一些问题。我已经开发了一个基类,如下所示,但这意味着我必须将类型传递给GetList方法。我真正需要的是自动获取派生类的类型,但我不能让它工作。

public abstract class LocalSystemTable
{
    public abstract string TableName { get; }
    public abstract string SingularName { get; }

    public List<T> GetList<T>(string baseUri, UserCredentials userCredentials)
    {
        var response = RestClient.At(baseUri).WithContentType(ContentType.Json).For(userCredentials).Get<dynamic>();

        var result = (response.ResponseObject[TableName])[SingularName];
        bool isArray = result.GetType() == typeof(JArray);

        if (isArray)
            return result.ToObject<List<T>>();
        else
        {
            T single = result.ToObject<T>();
            return new List<T> { single };
        }
    }
}

基本上我想转此:

GiftAidSettings settings = new GiftAidSettings();
List<GiftAidSettings> results = settings.GetList<GiftAidSettings>("some_uri", userCredentials);

进入这个:

GiftAidSettings settings = new GiftAidSettings();
List<GiftAidSettings> results = settings.GetList("some_uri", userCredentials);

这可能吗?

由于

1 个答案:

答案 0 :(得分:1)

我不知道这是否是你想要的,但你可以这样做:

    public abstract class BaseClass<T>
        where T : BaseClass<T>, new()
    {
        public List<T> GetList(string someParameter)
        {
            return new List<T>() { new T() };
        }
    }

    public class BaseClassImplementation : BaseClass<BaseClassImplementation>
    {
        // ..............
    }

然后:

    BaseClassImplementation n = new BaseClassImplementation();
    List<BaseClassImplementation> l = n.GetList("some parameter");