【问题标题】:Return (T)Request[key];返回 (T)Request[key];
【发布时间】:2011-09-12 04:38:12
【问题描述】:

我有这个运行良好的现有代码。

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

谢谢

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了! ChangeType 对我来说是新的。
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多