c# - Hastable 的 hastables,.Add 访问问题
问题描述
我正在尝试重新创建一个我已经使用过的旧脚本Ruby
,并且我正在使用 C# 来完成它,因为我正在将我的一个项目迁移到 Unity。此脚本在 3 个不同级别的文件夹中搜索文件。这就是我的意思,是一个filepath
,Folder1/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()
方法。
到底是怎么回事?有谁知道?。(即使你告诉我用其他方式来改进它,我也很想知道我为什么会出现这个错误)。
解决方案
它实际上是一个 HashTable,但是main_hash
,包含它的是一个对象集合。如果你确定你总是会在这个集合中找到一个哈希表,你可以强制它解析为一个带有强制转换的哈希表:
((HashTable)main_hash[first_folder.Key]).Add(...)
否则,您可以获取类型化的引用并对其进行测试:
var table = main_hash[first_folder.Key] as HashTable;
if(table != null)
{
table.Add(...);
}
推荐阅读
- ios - mac OS/iOS FindMy URL 方案:可以直接打开特定的人/设备/项目吗?
- java - 无法将 java.lang.String 类型的对象转换为 com.example.myapplication.MessageClass 类型
- swiftui - 如何在时间轴中显示多个条目内容?
- javascript - 如何在reactjs中单击时将映射数组动态添加和删除到另一个数组并从arr中删除
- android - 警报管理器未正确运行
- c++ - 如何将控制台输出切换到水平透视?棋盘问题
- javascript - 对生产的节点模块感到困惑
- py-telegram-bot-api - PyTelegramBot API:直接在文本命令上获取用户位置
- installation - 如何为窗口应用程序创建安装文件?
- reactjs - 如何使用 map 方法在 textarea 标签内添加动态内容