我在重构一些从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);
这可能吗?
由于
答案 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");