存储数据集的C#哈希表

存储数据集的C#哈希表,c#,hashtable,C#,Hashtable,我试图弄清楚如何使用哈希表存储和检索数据集 这是我尝试过的,但是当我尝试它时,我得到了无效的强制转换异常。另外,我如何循环通过该散列并获取密钥和数据集 Hashtable myHash = new Hashtable(); myHash.Add("1", someDataSet); foreach (DataSet ds in myHash) { lblMessage.Text = lblMessage.Text + " - Hash ID + ds[0].TableName"; }

我试图弄清楚如何使用哈希表存储和检索数据集

这是我尝试过的,但是当我尝试它时,我得到了无效的强制转换异常。另外,我如何循环通过该散列并获取密钥和数据集

Hashtable myHash = new Hashtable();
myHash.Add("1", someDataSet);
foreach (DataSet ds in myHash)
{
     lblMessage.Text = lblMessage.Text + " - Hash ID + ds[0].TableName";
}

我可能应该添加前两行代码,它在第三行崩溃。

您当前试图迭代所有键/值对,但将它们强制转换到
数据集。您可以通过以下方式轻松解决此问题:

foreach (DataSet ds in myHash.Values)
如果您实际上也需要键,您可以将迭代变量更改为类型,但除非您需要键,否则不需要使用该类型

。。。但我强烈建议您改为使用通用系列。

试试这个

foreach (DictionaryEntry entry in myHash)
{
    DataSet ds = (DataSet)entry.Value;
    lblMessage.Text = lblMessage.Text + " - Hash ID + ds[0].TableName";
}
Dictionary将以
DictionaryEntry
struct的形式保存
key
value
,因此您不能从
DictionaryEntry
强制转换到
DataSet
实际上,您的数据集是一个添加到哈希表的值,因此它将位于
DictionaryEntry.value
属性中


编辑如评论DirectCast中所述是合适的

您仍然使用非通用集合的任何原因?如果您使用的是泛型
词典
,您会在编译时发现为什么这是一个问题……从未听说过泛型词典您使用过泛型吗?它们是在C#2.0中引入的。我强烈建议你学习C#的更新版本-你会发现所有的事情都更容易。可能的重复你能给我一个通用集合如何工作的例子吗?@Bagzli:如果你以前从未使用过泛型,留出一些时间从头开始了解它们是值得的——一个例子对你来说几乎没有什么用处。为什么要像使用
一样使用而不是直接转换呢?如果该值不是
数据集
,则表示存在一个bug,理想情况下,该bug会尽快提示失败。@JonSkeet我通常更喜欢使用带有null检查的as关键字,以避免在运行时出现异常。这不是个好主意。在大多数情况下,您之所以选择强制转换,是因为您知道您期望的类型是什么,而任何其他类型都表明存在bug。你现在所做的就是有效地吞咽异常——在运行时获得异常要比在实际存在可检测错误的情况下,就好像一切都很好地继续进行要好得多。让他看看这个链接这是
上问的一个类似问题,所以
但是OP希望使用DataTable同样的概念适用。也就是说,如果OP可以遵循并理解此链接上的代码,请相信我,我知道答案。。也许你应该在网上查一下Jon Skeet是谁。。然后你就会明白为什么我们很多人都尊重他的知识也许你也应该尊重蚱蜢`