Dot-Net

如何將 Cookies 集合轉換為通用列表?容易地

  • September 8, 2021

任何人都知道我怎樣才能轉換Request.Cookies成一個List<HttpCookie>?以下內容不起作用,因為它引發了異常。

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

例外:無法將“System.String”類型的對象轉換為“System.Web.HttpCookie”類型

發生這種情況的原因是NameObjectCollectionBase,派生自列舉的類型是Request.Cookies對集合的鍵而不是對值的列舉。因此,當您列舉Request.Cookies集合時,您將獲得密鑰:

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 在評論部分和他的回答中指出的那樣,使用該AllKeys屬性更優化,因為它節省了演員:

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

引用自:https://stackoverflow.com/questions/2922762