Generics T型可数

Generics T型可数,generics,ienumerable,restsharp,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<

我正在尝试使用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);
}
public IEnumerable GetData(字符串url,数据格式ReturnFormat)
{
RestRequest request=newrestrequest(url,Method.GET){RequestFormat=ReturnFormat};
返回_restClient.Execute(请求);
}
但最后一行有错误

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

我认为问题在于IEnumerable的返回类型,但我想知道如果我对返回类型进行某种限制,它是否会起作用?如果是,什么

好的,我刚把代码改成这个

        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;

    }
public IEnumerable GetData(字符串url,数据格式ReturnFormat)
{
RestRequest request=newrestrequest(url,Method.GET){RequestFormat=ReturnFormat};
var a=_restClient.Execute(请求);
返回(IEnumerable)a.数据;
}

它编译。不确定它是否有效…但为什么它现在很高兴?

它很高兴,因为
Execute
在类型参数上有一个。这仅仅意味着
T
必须是一个带有无参数构造函数的具体类型,否则编译器会抱怨。大概
Execute
的实现类似于
result=newt(),并且
new()
约束确保可以以这种方式实例化该类型。如果您只是为
T
提供一个接口,它就无法知道如何构造一个具体实例。
new()
约束通过在编译时捕获它来防止这种情况。

它很高兴,因为
Execute
在类型参数上有一个。这仅仅意味着
T
必须是一个带有无参数构造函数的具体类型,否则编译器会抱怨。大概
Execute
的实现类似于
result=newt(),并且
new()
约束确保可以以这种方式实例化该类型。如果您只是为
T
提供一个接口,它就无法知道如何构造一个具体实例。
new()
约束通过在编译时捕获它来防止这种情况。

您希望客户端如何指定泛型类型参数?也许您应该使用另一个参数来指定类型名称,只需将返回类型设置为IEnumerable即可。您希望客户端如何指定泛型类型参数?也许您应该使用另一个参数来指定类型名称,只需将返回类型设置为
IEnumerable