我是否需要在以下代码中使用约束来解决上述编译器错误:
private T GetResponse<T, TError>(HttpResponseMessage response)
{
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<T>().Result;
}
else
{
if (response.StatusCode == HttpStatusCode.BadRequest)
{
var ex = response.Content.ReadAsAsync<TError>().Result;
throw ex;
}
}
throw new NotImplementedException();
}
我按以下方式调用上述内容:
public int MyMethod(string param)
{
var response = client.PostAsJsonAsync(url, param).Result;
return GetResponse<int, MyException>(response);
}
MyException
派生自System.Exception
,但是我得到了上面的编译器错误。是否需要约束?
答案 0 :(得分:0)
将方法更改为:
private T GetResponse<T, TError>(HttpResponseMessage response) where TError : Exception
答案 1 :(得分:0)
是的,Exception
语句要求类型派生自private T GetResponse<T, TError>(HttpResponseMessage response)
where TError : Exception
。约束会解决这个问题。
.htaccess
答案 2 :(得分:0)
在方法定义中添加where TError : Exception
。
答案 3 :(得分:0)
在编译时期间,ex
实际 是一个异常并不清楚。编译器只知道它是TError
类型,可能会也可能不会实现Exception
。虽然在调用GetResponse<int, MyException>(response)
时提供了类型,但编译器没有任何机会{@ 1}} 总是那个给定类型 - 所以在中你的通用方法根本就没有关于那种类型的知识。如果您要编写类似TError
的内容,编译器应该怎么做?
由于GetResponse<int, MyType>(response)
- 语句需要throw
的实例,因此您需要Excpetion
的类型约束。