.net - 如何将 Cookie 集合转换为通用列表?容易地

标签 .net generics .net-3.5

有人知道我如何转换Request.Cookies进入List<HttpCookie> ?以下代码不起作用,因为它引发了异常。

List<HttpCookie> lstCookies = new List<HttpCookie>(
    Request.Cookies.Cast<HttpCookie>());

异常:无法将“System.String”类型的对象转换为“System.Web.HttpCookie”类型

最佳答案

发生这种情况的原因是 NameObjectCollectionBase Request.Cookies 派生的类型枚举集合的键而不是值。因此,当您枚举 Request.Cookies 集合时,您将获得 key :

public virtual IEnumerator GetEnumerator()
{
    return new NameObjectKeysEnumerator(this);
}

这意味着以下内容将起作用:

string[] keys = Request.Cookies.Cast<string>().ToArray();

我想你可以尝试以下可能被认为丑陋但有效的方法:

List<HttpCookie> lstCookies = Request.Cookies.Keys.Cast<string>()
    .Select(x => Request.Cookies[x]).ToList();
<小时/>

更新:

正如 @Jon Benedicto 在评论部分和 his answer 中指出的那样使用 AllKeys 属性更为优化,因为它可以保存转换:

List<HttpCookie> lstCookies = Request.Cookies.AllKeys
    .Select(x => Request.Cookies[x]).ToList();

关于.net - 如何将 Cookie 集合转换为通用列表?容易地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2922762/

相关文章:

c# - 如何在所有绘制点之间画一条线?

.net - 如何确定AD组是否包含来自另一个(可信)域的给定DirectoryEntry?

c# - 您可以使用 SOAP 和 WSHttpBinding 对 WCF 服务进行 jQuery 调用吗?

c# - 如何通过 SOCKS 代理将文件上传到 FTP 服务器?

scala - Scala中的类型别名有序泛型

c# - Linq - 查询列表<string[]>

c# - 如何实现具有多个应用程序实例的进度条?

java - Java 泛型默认构造函数

java - 泛型<T extends Comparable<?的解释collection.sort/comparable 代码中的 super T>>?

c# - 有没有办法做到这一点,在 List<T>.ForEach() 语句中分配一个值?