Restsharp返回类型为T的IEnumerable

时间:2015-12-14 06:39:14

标签: generics ienumerable restsharp

我正在尝试使用RestSharp为我的web api创建一个通用的GET方法。

public  IEnumerable<T> GetData<T>(string url, DataFormat ReturnFormat )
{
   RestRequest request = new RestRequest(url, Method.GET) { RequestFormat = ReturnFormat };
   return _restClient.Execute<IEnumerable<T>>(request);
}

但最后一行有错误

  

错误2'System.Collections.Generic.IEnumerable'必须是具有公共无参数构造函数的非抽象类型,才能在泛型类型或方法'RestSharp.RestClient.Execute(RestSharp)中将其用作参数'T' .IRestRequest)'

我认为问题是IEnumerable的返回类型但是想知道如果我对返回类型设置了某种限制,它是否会起作用?如果是这样的话?

Ok ..我刚刚将代码更改为此

        public  IEnumerable<T> GetData<T>(string url, DataFormat ReturnFormat )
    {
        RestRequest request = new RestRequest(url, Method.GET) { RequestFormat = ReturnFormat };
        var a = _restClient.Execute<List<string>>(request);

        return (IEnumerable<T>)a.Data;

    }

它编译。不知道它是否有效......但为什么现在开心呢?

1 个答案:

答案 0 :(得分:0)

很高兴,因为Execute<T>在类型参数上有new() constraint。这只是意味着T必须是具有无参数构造函数的具体类型,否则编译器会抱怨。据推测,Execute<T>的实现与result = new T();类似,new()约束确保可以以这种方式实例化类型。如果您只为T提供接口,则无法知道如何构造具体实例。 new()约束通过在编译时捕获它来阻止它。