首页 > 解决方案 > Hastable 的 hastables,.Add 访问问题

问题描述

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

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

此后,对于"Folder1"my中的 each Hashtable,它对 each 中的 each 执行第二次搜索,"Folder2""Folder1"这里我添加 each 的每个文件夹名称"Folder2",作为包含该Hashtable的的键。"Folder1""Folder2"

对于每"Folder2"一个,我在那个里面"Folder1"搜索每一个,等等。"Folder3""Folder2""Folder1"

我有问题。我有我的 main Hashtable,每个键都代表 a "Folder1",我可以搜索 every"Folder2"里面的 every "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])

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

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

标签: c#unity3dhashtable

解决方案


它实际上是一个 HashTable,但是main_hash,包含它的是一个对象集合。如果你确定你总是会在这个集合中找到一个哈希表,你可以强制它解析为一个带有强制转换的哈希表:

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

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

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

推荐阅读