rtp*_*rry 2 .net c# generics extension-methods out
我正在尝试编译以下代码:
public static void RequireOrPermanentRedirect<T>(this System.Web.UI.Page page, string QueryStringKey, string RedirectUrl, out T parsedValue)
{
string QueryStringValue = page.Request.QueryString[QueryStringKey];
if (String.IsNullOrEmpty(QueryStringValue))
{
page.Response.RedirectPermanent(page.ResolveUrl(RedirectUrl));
}
try
{
parsedValue = (T)Convert.ChangeType(QueryStringValue, typeof(T));
}
catch
{
page.Response.RedirectPermanent(RedirectUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到编译器错误:
Error 1 The out parameter 'parsedValue' must be assigned to before control leaves the current method
Run Code Online (Sandbox Code Playgroud)
它是一种我已经使用了一段时间的扩展方法,但我想稍微扩展一下,以便我不必重新分析值以在页面内使用它.
目前的用法:
Page.RequireOrPermanentRedirect<Int32>("TeamId", "Default.aspx");
int teamId = Int32.Parse(Request.QueryString["TeamId"]);
Run Code Online (Sandbox Code Playgroud)
我想做的是:
private Int32 teamId;
protected void Page_Load(object sender, EventArgs e)
{
Page.RequireOrPermanentRedirect<Int32>("TeamId", "Default.aspx", out teamId);
}
Run Code Online (Sandbox Code Playgroud)
我刚刚创建并抛弃的当前(工作)代码T value:
try
{
T value = (T)Convert.ChangeType(QueryStringValue, typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 10
方法很好,但是你需要做一些Exception事情,因为你没有重新抛出.这意味着你可以退出方法(在异常之后ChangeType)而不给它一个值.
在这种情况下,也许:
catch
{
parsedValue = default(T);
page.Response.RedirectPermanent(RedirectUrl);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |