返回(T)请求[key];

本文关键字:key 请求 返回 | 更新日期: 2023-09-27 17:58:53

我有这个现有的代码,它运行得很好。

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];
}

感谢

返回(T)请求[key];

可以使用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];
    }
}

在您的情况下,我可能希望使用更安全的方法来获取、验证和解析用户输入,这样应用程序就不会变成一堆异常处理或错误屏幕。