我现有的代码非常有效。
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];
}
谢谢
答案 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];
}
}
您可能希望依靠更安全的方法来获取,验证和解析用户输入,以便应用程序不会成为异常处理或错误屏幕的混乱。