需要 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】:非泛型集合,包括 ArrayList
和 HashTable
,不包含在 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的主要内容,如果未能解决你的问题,请参考以下文章