Nae*_*raz 8 .net generics .net-3.5
谁知道我怎么能Request.Cookies
变成一个List<HttpCookie>
?以下不起作用,因为它抛出异常.
List<HttpCookie> lstCookies = new List<HttpCookie>(
Request.Cookies.Cast<HttpCookie>());
Run Code Online (Sandbox Code Playgroud)
例外:无法将"System.String"类型的对象强制转换为"System.Web.HttpCookie"类型
Dar*_*rov 11
发生这种情况的原因是因为派生的NameObjectCollectionBase
类型Request.Cookies
枚举了集合的键而不是值.因此,当您枚举Request.Cookies
集合时,您将获得密钥:
public virtual IEnumerator GetEnumerator()
{
return new NameObjectKeysEnumerator(this);
}
Run Code Online (Sandbox Code Playgroud)
这意味着以下内容将起作用:
string[] keys = Request.Cookies.Cast<string>().ToArray();
Run Code Online (Sandbox Code Playgroud)
我想你可以尝试以下可能被认为是丑陋但可行的:
List<HttpCookie> lstCookies = Request.Cookies.Keys.Cast<string>()
.Select(x => Request.Cookies[x]).ToList();
Run Code Online (Sandbox Code Playgroud)
更新:
正如@Jon Benedicto在评论部分和他使用该AllKeys
属性的回答中所指出的更为优化,因为它节省了一个演员:
List<HttpCookie> lstCookies = Request.Cookies.AllKeys
.Select(x => Request.Cookies[x]).ToList();
Run Code Online (Sandbox Code Playgroud)
如果你真的想要一个List<HttpCookie>
没有key-> value连接的笔直,那么你可以使用LINQ中的Select来做到这一点:
var cookies = Request.Cookies.AllKeys.Select(x => Request.Cookies[x]).ToList();
Run Code Online (Sandbox Code Playgroud)