Powodem dzieje się tak dlatego, że typ NameObjectCollectionBase
Request.Cookies
wywodzi wylicza powyżej klawiszy gromadzenia i nie na wartości. Więc kiedy wyliczyć nad kolekcji Request.Cookies
otrzymujesz kluczy:
public virtual IEnumerator GetEnumerator()
{
return new NameObjectKeysEnumerator(this);
}
Oznacza to, że dalej będzie działać:
string[] keys = Request.Cookies.Cast<string>().ToArray();
Myślę, że można spróbować następujących składników, które mogłyby zostać uznane za brzydkie, ale będzie praca:
List<HttpCookie> lstCookies = Request.Cookies.Keys.Cast<string>()
.Select(x => Request.Cookies[x]).ToList();
UPDATE:
Jak podkreślił @Jon Benedicto w komentarzach iw his answer stosując właściwość AllKeys
jest bardziej optymalny, gdyż oszczędza Obsada:
List<HttpCookie> lstCookies = Request.Cookies.AllKeys
.Select(x => Request.Cookies[x]).ToList();
Ale wtedy tracisz klawisz -> Połączenie wartość :) – Snake
@Snake, zgadzam się z Tobą, że to nie jest optymalny z punktu widzenia wydajności, ponieważ wielokrotnie wylicza kolekcję, ale jeśli masz kilka elementów, może to nie być dramatyczne. –
Używanie członka AllKeys w HttpCookieCollection zapisuje rzutowanie. Zobacz moją odpowiedź na kod. –