System.Activator.CreateInstance返回null

时间:2011-08-21 11:04:58

标签: .net null return activator createinstance

我遇到的问题是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!!!");
}

它确实是空的,所以这让我相信Activator找不到类型,所以我不确定从这里做什么。

1 个答案:

答案 0 :(得分:0)

假设Activator.CreateInstance确实正常工作,那么提供给方法调用的参数必定存在一些错误。 (因此早些时候的问题)。

由于缺乏传递给CreateInstance的实际值的知识,我猜测但我怀疑传递的值为null或者是一个内部类型但位于不同程序集或类似访问问题的类型。