hastables的hastable,.Add访问问题

问题描述

我正在尝试重新创建一个已经在Ruby中使用过的旧脚本,并且我正在使用C#进行此操作,因为我正在将我的项目迁移到Unity。 该脚本在3个不同级别的文件夹内搜索文件。这就是我的意思,是filepathFolder1/Folder2/Folder3/files_are_here

说明:我的工作脚本(在Ruby上)是通过搜索每个"Folder1"并将每个名字作为Hashtable的键来实现的。 (因此,现在我有一个Hashtable,其中每个键都是一个文件夹的名称,该文件夹将代表我上面提到的"Folder1"的{​​{1}}部分)。 我还为每个键定义了一个值,一个新的filepath

此后,对于我的Hashtable中的每个"Folder1",它都会对每个Hashtable内的每个"Folder2"执行第二次搜索在这里添加了每个"Folder1",作为包含该"Folder2"的{​​{1}}的{​​{1}}的密钥。

对于每个Hashtable的每个"Folder1",我搜索"Folder2"内的"Folder2"内的每个"Folder1",等等。

我有问题。我有自己的主"Folder3",每个键代表一个"Folder2",并且可以在每个"Folder1"搜索每个Hashtable

我的问题是当我尝试做时:

"Folder1"

它说"Folder2",但如果我:

"Folder1"

它打印main_hash[first_folder.Key].Add(folder_2_name,new Hashtable()) ,因此它是('object' does not contain a deFinition for 'Add'),它必须具有Debug.Log(main_hash[first_folder.Key]) 方法

这是怎么回事?有谁知道?。 (即使您告诉我以其他方式执行此操作,以便我可以改进它,我也想知道为什么会出现该错误)。

解决方法

它实际上是一个HashTable,但是包含它的main_hash是一个对象集合。如果确定在此集合中总能找到一个哈希表,则可以通过强制转换将其解析为哈希表:

((HashTable)main_hash[first_folder.Key]).Add(...)

否则,您可以输入类型化的引用并对其进行测试:

var table = main_hash[first_folder.Key] as HashTable;
if(table != null)
{
    table.Add(...);
}