需要Hashtable和Arraylist

Wil*_*sch 10 c# dll visual-studio windows-phone-7 assembly-references

我试图在我的Windows 7 Phone应用程序中使用其他人的C#类.这些类使用Hashtable类型的对象.

有问题的文件有

using System.Collections;
Run Code Online (Sandbox Code Playgroud)

在顶部,所以我假设它是它想要的Hashtable对象.

当我尝试构建我的解决方案时,我得到的错误是无法找到类型或命名空间名称'Hashtable',您是否缺少using指令或程序集引用.

在微软的Hashtable文档中,我看到它表示Assembly:mscorlib

但是如果我尝试通过Project> Add Reference添加mscorlib,VS说它无法添加它,因为它会被构建系统自动引用.

我错过了什么?

SLa*_*aks 27

非泛型集合(包括ArrayListHashTable)不包含在Silverlight中.
这些类是.Net 1.0(没有泛型)的保留,不应该在新代码中使用.

相反,你应该使用泛型集合 - List<T>Dictionary<TKey, TValue>.


Gab*_*abe 10

你有几个选择:

  1. 您的进口改为using System.Collections.Generic;和每次使用的改变HashTableDictionary<>ArrayListList<>.

  2. 或许可以逃脱:

    using HashTable = System.Collections.Generic.Dictionary<object, object>;
    using ArrayList = System.Collections.Generic.List<object>;
    请注意,任何未来的维护者都会讨厌这样做.

  3. 但最好重构代码以正确使用泛型集合.

  4. Hashtable在命名空间中创建一个类System.Collections,IDictionary<object, object>通过将所有内容转发到内部Dictionary<object, object>并实现必要的行为更改(锁定,缺少键等)来实现; 创建一个ArrayList封装List<object>.(由henon建议)

  • 对于令人讨厌的#2建议+1,然后指出将来有人看到它可能希望你去除内脏 (2认同)