返回(T)请求[密钥];

时间:2011-06-10 03:03:06

标签: c# asp.net

我现有的代码非常有效。

public static T SessionGet<T>(string key)
{
    if (Session[key] == null)
        return default(T);
    else
        return (T)Session[key];
}

我想制作一个适用于Request的版本。我意识到Request是基于字符串的。那么如何更改代码,以便在不必根据typeof(T)放置大型开关的情况下发生错误,如下面的注释所示。

return (T)Request[key]; // Cannot cast expression of type 'string' to type '(T)'

这是函数....

public static T RequestGet<T>(string key)
{
    if (Request[key] == null)
        return default(T);
    else
        return (T)Request[key];
}

谢谢

1 个答案:

答案 0 :(得分:6)

可以使用Convert.ChangeType方法来完成此任务,但你依赖输入正确,否则你会得到一个例外。 Request处理用户提供的数据,因此这种假设非常风险。这与您使用Session时的操作不同,因为您可以控制Session中的内容。 Request并非如此。

public static T RequestGet<T>(string key)
{
    if (Request[key] == null)
    {
        return default(T);
    }
    else
    {
        return (T)Convert.ChangeType(Request[key], typeof(T));
        // return (T)Request[key];
    }
}

您可能希望依靠更安全的方法来获取,验证和解析用户输入,以便应用程序不会成为异常处理或错误屏幕的混乱。