我有一个接受T
并有一个方法的类,该方法接受HttpResponseMessage
并修改响应中的内容。
public class MyClass<T> {
HttpResponseMessage Modify(HttpResponseMessage response) {
T content;
if(response.TryGetContentValue(out content)) {
DoSomethingWithContent(content);
}
return response;
}
public void DoSomethingWithContent(T content) {}
public void DoSomethingWithContent(IEnumerable<T> content) {}
}
像这样使用...
只要响应内容值是 type T
, 它就可以工作,但有时它是IEnumerable<T>
,在这种情况下TryGetContentValue()
会返回 false ,因为T
is notIEnumerable<T>
。所以我创建了一个重载,DoSomethingWithContent
但我正在努力找出一种有效的方法来动态转换或声明content
为正确的类型,以便调用正确的重载。
回答
我选择了recursive
答案,但我想发布完整的方法以供参考:
public class MyClass<T> {
HttpResponseMessage Modify(HttpResponseMessage response) {
object content;
if(response.TryGetContentValue(out content)) {
if(content is IEnumerable<T>)
DoSomethingWithContent((IEnumerable<T>)content);
else
DoSomethingWithContent((T)content);
}
return response;
}
public void DoSomethingWithContent(T content) {}
public void DoSomethingWithContent(IEnumerable<T> content) {}
}