为什么不能将类型传递给泛型方法?
本文关键字:泛型方法 不能 类型 为什么 | 更新日期: 2023-09-27 18:09:44
简单介绍一下背景。我正在尝试各种方法来测试API,并且我正在尝试允许用户提供API调用的简单CSV文件,我的测试框架可以使用通用测试方法进行迭代。我在将类型传递给泛型API调用方法时遇到了麻烦。请允许我示范一下。
假设我有一个基本结构如下的方法
public T GetData<T>(Uri uri, HttpStatusCode expectedStatusCode)
{
var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
myHttpWebRequest.Accept = "application/json";
var response = (HttpWebResponse)myHttpWebRequest.GetResponse();
if (response.StatusCode != expectedStatusCode)
Report.Log(ReportLevel.Failure, "ExpectedResponseCode:" + expectedStatusCode.ToString() + " ActualResponseCode:" + response.StatusCode.ToString());
string responseString = "";
using (var stream = response.GetResponseStream())
{
var reader = new StreamReader(stream, Encoding.UTF8);
responseString = reader.ReadToEnd();
}
return JsonConvert.DeserializeObject<T>(responseString);
}
我可以像这样调用上面的代码,没有问题
Person person = _apiHelper.GetData<Person>(uri, HttpStatusCode.Ok);
然而,假设我现在有一个类型,我已经获得了如下
Type returnType = Type.GetType(typeString, true, true);
为什么不能像下面这样调用GetData方法
var result = _apiHelper.GetData<returnType>(uri, HttpStatusCode.Ok);
Visual studio只是说它无法解析符号
使用JsonConvert。接受类型参数而不是泛型参数的DeserializeType重载:
public object GetData(Type t,Uri uri, HttpStatusCode expectedStatusCode)
{
....
return JsonConvert.DeserializeObject(responseString,t);
}
这是XY问题的一个例子。你想要反序列化任意类型(问题X),并且认为你需要在运行时传递一个泛型类型(问题Y),所以当你遇到问题时,你询问Y。