Hashtable的Hashtable,.Add访问问题

Hastable of hastables, .Add access problem

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

说明:我的工作脚本(在 Ruby 上)通过搜索每个 "Folder1" 并将每个名称作为键分配给 Hashtable 来执行此操作。 (所以现在我有一个 Hashtable,其中每个键都是一个文件夹的名称,它将代表我上面提到的 filepath"Folder1" 部分)。 我还为每个键定义了一个值,一个新的 Hashtable.

此后,对于我的 Hashtable 中的每个 "Folder1",它都会对每个 "Folder1" 中的每个 "Folder2" 执行第二次搜索,在这里我添加每个文件夹每个 "Folder2" 的名称,作为包含 "Folder2".

"Folder1"Hashtable 的键

对于每个 "Folder2" 对于每个 "Folder1",我在 "Folder2" 中搜索每个 "Folder3""Folder1" 中,等等

我有问题。我有我的主 Hashtable,每个键代表一个 "Folder1",我可以在每个 "Folder1".

中搜索每个 "Folder2"

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

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])

它打印System.Collections.Hashtable,所以它是一个Hashtable,它应该有一个.Add()方法。

这是怎么回事?有谁知道?。 (即使你告诉我用其他方法来改进它,我也很想知道为什么我会遇到这个错误)。

它其实是一个HashTable,但是main_hash,包含它的是一个对象集合。如果你确定你总是会在这个集合中找到一个散列 table,你可以强制它解析为散列 table 并转换为:

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

否则你可以获取一个类型化的引用并测试它:

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