[Win] error CS0246: Hashtable and ArrayList

在移植Unity3D遊戲時,遇到的這個問題,作為一個紀錄。

首先,Windows store app不支援Hashtable和ArrayList兩個namespace。所以要改寫,在網路上找到說可以使用Dictionary<TKey, TValue>和List<T>來改寫,現在就先試試看。

基本上這篇應該不會有什麼正式的講法,純粹是心得上的紀錄。

在第一次用Unity去build出Windows Store App的專案時,會跳出很多說不支援 Hashtable和ArrayList的描述,這時我們該用Dictionary<object, object>和List<object>來改寫。建議全改成object形式,不然就會跟我一樣要重新去看。有時候可以指定型別是string或int,要看情況。

為什麼是用object而不是Type,這是因為大部分放入的值,多半是int、string之類的object衍生型別,放入Type會有很多轉型問題。

第一次這樣做完,很容易遇到問題,就是巢狀。

有些Hashtable可能要改成List<List<object>>之類的樣子,這要由上下文去檢查。

另外是List<object>有個好處,他可以放入List<object>,比方說:

List<object> st = new List<object>();
List<object> arr = new List<object>();
st.Add(arr);

換句話說是否要專門去支援巢狀?這可能要看code以及你對於優化的要求有多少。

另外要提及javascript的變數宣告,因為要改寫 javascript的Hashtable,我發現一個變數宣告上的問題。我想大家都知道,如果不知道的話你剛好賺到了!

在C#:

 List<object> st = new List<object>();

在 javascript:

var st: List.<object> = new List.<object>();

注意到dot了嗎?這一行是說名為st的變數型別是泛形List,且初始化blabla。那個dot不要忘記啊。大致上的寫法和C#一樣,在這邊微妙的不同容易出錯,請各位留意。對於泛型Dictionary的宣告也是類似的。請參考這篇文章

留言