需要 Hashtable 和 Arraylist

Posted

技术标签:

【中文标题】需要 Hashtable 和 Arraylist【英文标题】:Need Hashtable and Arraylist 【发布时间】:2011-06-28 00:34:28 【问题描述】:

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

有问题的文件有

using System.Collections;

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

当我尝试构建我的解决方案时,我收到了找不到类型或命名空间名称“Hashtable”的错误,您是否缺少 using 指令或程序集引用。

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

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

我错过了什么?

【问题讨论】:

【参考方案1】:

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

相反,您应该使用通用集合——List<T>Dictionary<TKey, TValue>

【讨论】:

【参考方案2】:

你有几个选择:

    将您的导入更改为using System.Collections.Generic;,并将每次使用HashTable 更改为Dictionary<>ArrayList 更改为List<>

    可能能够逃脱:

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

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

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

【讨论】:

#2 是一个可怕的想法。不过,它会起作用,只是您需要完全限定的类型名。 @SLaks:你可能没有注意到,但我有 3 个想法。哪个可怕?另外,我不确定您的意思是需要完全合格。 using 语句需要完全限定的类型名,除非单独放在 namespace 内。 SLkaks:好点子。几乎可以肯定的是,足以使用旧集合类的代码将在namespace 之外具有using 列表。 +1 表示可恶的 #2 建议,然后指出将来任何人看到它都可能希望你被剔除内脏【参考方案3】:

根据您使用的 .NET 框架,有不同的 mscorlib。如果您查看 MSDN 页面上的“其他版本”下拉菜单,您会看到 Hashtable 不是 Silverlight 的一部分。您将需要使用Dictionary<Object, Object>(或理想情况下更强类型的键和值类型)

【讨论】:

【参考方案4】:

System.Collection 是 .Net 第一版的遗留物 - 没有泛型类型。

要修复您的代码,请使用 Dictorany 类,它本质上是一个哈希表, 和 List insted 的 ArrayList。

【讨论】:

【参考方案5】:

改变对我有用:

Dictionary<object, object> 的哈希表

Dictionary<object, object> 的 NameValueCollection

我遇到的其他问题是 Encoding.ASCII 也没有定义,我用一个 *** 小伙子写的函数对其进行了排序:

public static byte[] StringToAscii(string s) 
    byte[] retval = new byte[s.Length];
    for (int ix = 0; ix < s.Length; ++ix) 
        char ch = s[ix];
        if (ch <= 0x7f) retval[ix] = (byte)ch;
        else retval[ix] = (byte)'?';
    
    return retval;

学分在这里:

ASCIIEncoding In Windows Phone 7

所以最后要返回 ASCII 这是要做什么:

return StringToAscii(Encoding.Unicode.GetString(result.ToArray()));

【讨论】:

以上是关于需要 Hashtable 和 Arraylist的主要内容,如果未能解决你的问题,请参考以下文章

HashMap 和 Hashtable 有什么区别?

HashMap和Hashtable的区别

Java 中 Hashtable与HashMap的区别

HashSet 和 HashMap 都使用 Hashtable 吗?或者 Hashtable 是完全不同的数据结构?

HashMap和HashTable的区别

HashMap和Hashtable的详细区别