を受け取り、応答のコンテンツを変更する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) {}
}
このように使用...
T
これは、応答コンテンツの値がタイプで ある限り機能しますが、場合によってはタイプであり、そうでないIEnumerable<T>
場合TryGetContentValue()
は false を返しますT
IEnumerable<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) {}
}