2011-08-21 81 views
3

我遇到的問題是CreateInstance返回null。System.Activator.CreateInstance返回null

下面是代碼:

if(spattmono[0] != null) 
{ 
    if((SpecialAttack) System.Activator.CreateInstance(
     spattmono[0].GetClass()) == null) 
    { 
    Debug.Log("DUMB ACTIVATOR!!!"); 
    } 

//combo.SetSpecialAttack(spattack); 
} 

AttackSpecialAttack是存儲基本信息兩類,並從UnityEngine.Object繼承。

Attmonospattmono都是MonoScript陣列,attmono能夠保持16 spattmono能夠保持4

他們從這些有信息。

for(int at = 0; at < numberOfAttacks; ++at) 
{ 
    attmono[at] = (MonoScript) EditorGUILayout.ObjectField(attmono[at], 
     typeof(MonoScript), false); 
} 

for(int spat = 0; spat < 4; ++spat) 
{ 
    spattmono[spat] = (MonoScript) EditorGUILayout.ObjectField(
     spattmono[spat], typeof(MonoScript), false); 
} 

你能想到的MonoScript一樣的東西,擁有對象是什麼類的類型。 我已經用Debug.Print語句檢查了其中的每一個,並且在分配時都不爲空。

這是SpecialAttack的代碼。

public class SpecialAttack : UnityEngine.Object 
{ 
    public string Name; 

public int Damage; 
public int Force; 
public float Cooldown; 

public SpecialAttack() 
    { } 

public virtual bool Run() 
    { 
    return false; 
} 
} 

,我最近測試了這個

if((SpecialAttack)System.Activator.CreateInstance(spattack.GetType()) == null) 
{ 
    Debug.Log("DUMB ACTIVATOR!!!"); 
} 

而且它的確是零,所以這讓我相信,激活找不到的類型,所以我不會給知道該怎麼在這裏做。

+0

什麼是'Attack','SpecialAttack'? 'spattmono []'和'attmono []'數組中有什麼,你是如何創建它們的。你需要擴大這個問題,任何人都可以有一個合理的機會來回答這個問題。 – Kev

+0

添加了更多信息。 – Diddykonga

+0

當CreateInstance返回null時,'spattmono [0] .GetClass())會返回什麼? –

回答

0

我們假設Activator.CreateInstance確實可以正常工作,那麼對於提供給方法調用的參數必定會有些錯誤。 (因此,前面的問題)。

由於缺乏對傳遞給CreateInstance的實際值的知識,我在猜測,但我會懷疑傳入的值爲null或者是一個內部類型,但駐留在不同的程序集或類似的訪問問題中。

+0

那麼我傳入Activator的MonoScript不是null,因爲在嘗試之前我有一個檢查。關於訪問問題我不確定。 – Diddykonga

+0

MonoScript?你說GetClass()返回一個類型,它是哪一個? –

+0

什麼?它確實返回類型。我在說,MonoScript變量spattmono [0]不能爲null,因爲我在使用CreateInstance之前進行了檢查。 – Diddykonga