System.IO.Directory.EnumerateDirectories(dir) 的 Unity .Net 语法
Unity .Net Syntax for System.IO.Directory.EnumerateDirectories(dir)
我有一些代码可以在我的 windows 表单项目中使用:
MatBaseIndicies = new Dictionary<string, int>();
string dir = Path.Combine(Data.BaseDir, "images");
dir = Path.Combine(dir, "equipment");
var subfolders = System.IO.Directory.EnumerateDirectories(dir);
int counter = 0;
foreach(string sub in subfolders)
{
MatBaseIndicies.Add(Path.GetFileName(sub), counter);
counter++;
}
基本上,此代码会读取所有子文件夹,然后将它们的名称作为键添加到字典中,以便可以通过整数查找它们。
如果你想知道这个的目的(如果你不知道,请跳过这一段):这是一个高度可定制的游戏的一部分,该游戏在启动时搜索文件夹以找到它的所有资产。当对象被序列化以进行保存时,字符串值被保存,这样 link 就不会丢失到相关资产中。当对象被反序列化时,对象只需要存储一个查找字符串的int(节省内存)
此代码无法在 Unity 5 中编译,因为 Unity 使用更旧版本的 .Net,其中不包含 "System.IO.Directory.EnumerateDirectories"
的定义
抱歉,我不确定确切的 .Net 版本号...
如何重写此代码以支持 Unity 5?
Unity 建立在 .Net 3.5 之上,正如您所指出的那样,这是一个更旧的版本。
不过您确实有一个选项,Directory.GetDirectories 函数会给您(几乎)相同的结果。
我有一些代码可以在我的 windows 表单项目中使用:
MatBaseIndicies = new Dictionary<string, int>();
string dir = Path.Combine(Data.BaseDir, "images");
dir = Path.Combine(dir, "equipment");
var subfolders = System.IO.Directory.EnumerateDirectories(dir);
int counter = 0;
foreach(string sub in subfolders)
{
MatBaseIndicies.Add(Path.GetFileName(sub), counter);
counter++;
}
基本上,此代码会读取所有子文件夹,然后将它们的名称作为键添加到字典中,以便可以通过整数查找它们。
如果你想知道这个的目的(如果你不知道,请跳过这一段):这是一个高度可定制的游戏的一部分,该游戏在启动时搜索文件夹以找到它的所有资产。当对象被序列化以进行保存时,字符串值被保存,这样 link 就不会丢失到相关资产中。当对象被反序列化时,对象只需要存储一个查找字符串的int(节省内存)
此代码无法在 Unity 5 中编译,因为 Unity 使用更旧版本的 .Net,其中不包含 "System.IO.Directory.EnumerateDirectories"
的定义抱歉,我不确定确切的 .Net 版本号...
如何重写此代码以支持 Unity 5?
Unity 建立在 .Net 3.5 之上,正如您所指出的那样,这是一个更旧的版本。
不过您确实有一个选项,Directory.GetDirectories 函数会给您(几乎)相同的结果。