1

我有一种情况,我想编写一个可以在 HttpResponse 和 HttpResponseBase 上使用的扩展。

经过一番研究,发现两者是兄弟,但只是通过Object类的简单扩展。

而且由于您只能用一个特定的类定义一个泛型,我遇到了一个问题,即必须编写两次相同的方法来处理两个不同的对象模型: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");
}
4

1 回答 1

5

通过使用. HttpResponse_ 这样可以节省您复制代码体的时间。HttpResponseBasenew 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
}
于 2013-08-08T17:28:23.283 回答