我有一种情况,我想写一个可以在HttpResponse和& HttpResponseBase。
经过一番研究,发现两者都是兄弟姐妹,但只能通过Object类的简单扩展。
由于你只能用一个特定的类来定义Generic,我遇到的问题是必须编写两次相同的方法来处理两个不同的对象模型:Web应用程序重定向和MVC重定向。
目前的实施,虽然我不喜欢它:
public static void RedirectTo404(this HttpResponseBase response)
{
response.Redirect("~/404.aspx");
}
public static void RedirectTo404(this HttpResponse response)
{
response.Redirect("~/404.aspx");
}
我想有这样的东西(我知道它在语法上不可能,但是要提出一个想法)
public static void RedirectTo404<T>(this T response) where T : HttpResponseBase , HttpResponse
{
response.Redirect("~/404.aspx");
}
答案 0 :(得分:5)
通过HttpResponse
调用HttpResponseBase
版本代理到new HttpResponseWrapper(response)
版本。这可以节省你复制代码体的时间。
或者有一个采用动态类型参数的通用方法。我不会选择这种方法,因为它是动态输入的,没有充分的理由。
public static void RedirectTo404(this HttpResponseBase response)
{
response.Redirect("~/404.aspx");
}
public static void RedirectTo404(this HttpResponse response)
{
RedirectTo404(new HttpResponseWrapper(response)); //delegate to implementation
}