如何在Xamarin.Forms便携式项目中使用System.Collections

时间:2016-04-23 11:16:56

标签: c# .net xamarin xamarin.forms portable-class-library

所以,你好。

我对 .NET Framework CookieContainer类有疑问。当我在CookieContainer中使用Cookie时,getCookies无法获取Cookie 我认为,问题在于CookieContainer类的方法getCookies(),因为我的域有许多子域,如:

this.has.lots.of.subdomains.com

不知道,如果它是一个错误,或者我做错了什么,但我决定通过获取所有Cookie来解决这个问题,然后自己搜索 迭代我得到的所有Cookies(大多数只有2到3个Cookie,所以它不是什么大问题。)

我在stackoverflow上找到的方法就是这个:

 public static CookieCollection GetAllCookies(this CookieContainer cookieJar)
    {
        CookieCollection cookieCollection = new CookieCollection();

        Hashtable table = (Hashtable)cookieJar.GetType().InvokeMember("m_domainTable",
                                                                        BindingFlags.NonPublic |
                                                                        BindingFlags.GetField |
                                                                        BindingFlags.Instance,
                                                                        null,
                                                                        cookieJar,
                                                                        new object[] { });

        foreach (var tableKey in table.Keys)
        {
            String str_tableKey = (string)tableKey;
            if (str_tableKey[0] == '.')
            {
                str_tableKey = str_tableKey.Substring(1);
            }

            SortedList list = (SortedList)table[tableKey].GetType().InvokeMember("m_list",
                                                                        BindingFlags.NonPublic |
                                                                        BindingFlags.GetField |
                                                                        BindingFlags.Instance,
                                                                        null,
                                                                        table[tableKey],
                                                                        new object[] { });

            foreach (var listKey in list.Keys)
            {
                String url = "https://" + str_tableKey + (string)listKey;
                cookieCollection.Add(cookieJar.GetCookies(new Uri(url)));
            }
        }

        return cookieCollection;
    }

不幸的是,这种解决方法使用了一些我无法使用的类,例如来自System.Collections的Hashtable 命名空间,因为我正在开发Xamarin.Forms便携式项目。

我发现,有一个名为Microsoft Base Class Library的软件包,它似乎包含System.Collections命名空间,但即使在我的便携式项目上安装它之后,我也无法使用System.Collections包。

我错过了什么,还是我误解了什么?如果您知道,我如何使用这些课程,请告诉我我需要做什么。

1 个答案:

答案 0 :(得分:2)

基于PCL的System.Collection 缺少大部分非通用集合,Hashtable是缺少的类之一。

Hashtable是一个非泛型字典,因为它实现了IDictionary,并在函数中跟随Dictionary<object, object>,它可以在所有PCL配置文件中使用,并与Hashtable共享主要方法和属性。

因此,只需将所有Hashtable个实例替换为Dictionary<TKey, TValue>个实例,即可静态输入您的Cookie或Dictionary<object, object>,如果您真的不在乎打字。