這是一篇很冗長的文章。
因為要將 android的遊戲移植到Windows Store app上,今日遇到了相當大的困難。
首先是雖然成功將原先一堆使用Hashtable和ArrayList的型別轉換成Dictionary和List了,但是仍然在輸出成Xaml c# Solution時遇到有關Hashtable的問題。
WMC9999 在模組mscolib.dll中找不到型別System.Collections.Hashtable。
有關這個問題,網路上只有兩篇比較相關的:一和二。第一篇裡面有一些提示:
本來我想說要把Ani.boo裡面眾多疑似Hashtable的檔案改寫成Dictionary,但我發現這好困難啊。
首先來看一下boo裡面Dictionary的寫法:
但我好像沒有成功,此時,發現有人提供他改寫的AniMate.boo檔,他轉成C#的格式(本文),然後我把裡面全部的Hashtable改成Dictionary<object, object>。
除此之外,還有兩件事情要注意。第一個是Hashtable的淺層複製方法Clone,相對應於Dictionary,請參考範例(連結):
比方說要把製作一個dic1的淺層副本名叫dic2:
後來使用To方法時,遇到了找不到key的窘境:The given key was not present in the dictionary.
找了一下,發現一直在某一行就有問題,是ExtractOptions方法的第一個if判斷句,猜想應該是沒有這個key,但是判斷句的想法會自動假設成有的樣子,就增加了ContainKey()來判斷有無這個key,結果成功了。
後來改成這樣子:
以下皆同,就不貼了。
前言
因為要將 android的遊戲移植到Windows Store app上,今日遇到了相當大的困難。
首先是雖然成功將原先一堆使用Hashtable和ArrayList的型別轉換成Dictionary和List了,但是仍然在輸出成Xaml c# Solution時遇到有關Hashtable的問題。
WMC9999 在模組mscolib.dll中找不到型別System.Collections.Hashtable。
有關這個問題,網路上只有兩篇比較相關的:一和二。第一篇裡面有一些提示:
- 可能跟由舊版unity到新版unity有關
- 移除boo.lang.dll然後組態改x86。
改寫Ani.boo
本來我想說要把Ani.boo裡面眾多疑似Hashtable的檔案改寫成Dictionary,但我發現這好困難啊。
首先來看一下boo裡面Dictionary的寫法:
Dictionary[of object, object];
但我好像沒有成功,此時,發現有人提供他改寫的AniMate.boo檔,他轉成C#的格式(本文),然後我把裡面全部的Hashtable改成Dictionary<object, object>。
除此之外,還有兩件事情要注意。第一個是Hashtable的淺層複製方法Clone,相對應於Dictionary,請參考範例(連結):
比方說要把製作一個dic1的淺層副本名叫dic2:
Dictionary<string, string> dic1 = new Dictionary<object, object>();
dic1.Add("title", "item");
Dictionary<object, object> dic2 = new Dictionary<object, object>(dic1);
後來使用To方法時,遇到了找不到key的窘境:The given key was not present in the dictionary.
找了一下,發現一直在某一行就有問題,是ExtractOptions方法的第一個if判斷句,猜想應該是沒有這個key,但是判斷句的想法會自動假設成有的樣子,就增加了ContainKey()來判斷有無這個key,結果成功了。
後來改成這樣子:
if (options.ContainKey("delay") || options["delay"] == null) {
exct["delay"] = defaultDelay;
} else {
exct["delay"] = (float)options["delay"];
options.Remove("delay");
}
以下皆同,就不貼了。
留言
張貼留言