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(...);
}
我正在尝试重新创建一个我已经在 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(...);
}