try块内的泛型out值赋值
本文关键字:out 赋值 泛型 try | 更新日期: 2023-09-27 18:00:23
我正在尝试编译以下代码:
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);
}
}
但我得到了一个编译器错误:
Error 1 The out parameter 'parsedValue' must be assigned to before control leaves the current method
这是一种扩展方法,我已经使用了一段时间,但我想对它进行一点扩展,这样我就不必重新分析值来在页面中使用它。
当前用途:
Page.RequireOrPermanentRedirect<Int32>("TeamId", "Default.aspx");
int teamId = Int32.Parse(Request.QueryString["TeamId"]);
我想做的事:
private Int32 teamId;
protected void Page_Load(object sender, EventArgs e)
{
Page.RequireOrPermanentRedirect<Int32>("TeamId", "Default.aspx", out teamId);
}
我刚刚创建的当前(正在工作)代码丢弃了一个T value
:
try
{
T value = (T)Convert.ChangeType(QueryStringValue, typeof(T));
}
该方法很好,但在发生Exception
的情况下需要做一些事情,因为您不会重新抛出。这意味着您可以退出该方法(在ChangeType
中出现异常之后),而不给它一个值。
在这种情况下,可能:
catch
{
parsedValue = default(T);
page.Response.RedirectPermanent(RedirectUrl);
}