System.Activator.CreateInstance возвращает ноль - PullRequest
3 голосов
/ 21 августа 2011

У меня проблема в том, что CreateInstance возвращает ноль.

Вот код:

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

//combo.SetSpecialAttack(spattack);
}

Attack и SpecialAttack - оба класса, которые хранят основную информацию и наследуются от UnityEngine.Object.

Attmono и spattmono оба являются 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!!!");
}

И оно действительно было нулевым, поэтому я уверен, что Активатор не может найти тип, поэтому я не уверен, что делать дальше.

1 Ответ

0 голосов
/ 22 августа 2011

Предположим, что Activator.CreateInstance действительно работает правильно, поэтому в аргументах вызова метода должно быть что-то не так. (Отсюда и вопрос ранее).

Из-за недостатка знаний о фактическом значении, переданном CreateInstance, я предполагаю, но я подозреваю, что переданное значение является нулевым или является типом, который является либо внутренним, но находится в другой сборке, либо схожими проблемами доступа.

...