Activator.CreateInstance вызывает конструктор, но возвращает значение null

Я пытаюсь создать экземпляр универсального типа. Я попытался получить конструктор через отражение, и теперь так, как вы увидите ниже, и оба раза результирующий объект был нулевым.

Type type = typeof(StatDefinition<>).MakeGenericType(statTypes[selectedType]);
object definitionObject = Activator.CreateInstance(type, newName, newDescription);

StatTopic.WriteLine(definitionObject);

Чтобы помочь понять переменные, statTypes[selectedType] — это просто базовый тип (bool, int, float и т. д.). Для моего тестирования это всегда был typeof(float). 'newName' и 'newDescription' являются строками.

Конструктор для StatDefinition‹>:

public StatDefinition(string name, string description) : base(name, description)
{ 
    StatTopic.WriteLine(typeof(T)); 
}

Моя консоль сначала выводит «System.Single» (из конструктора StatDefinition), а затем «null» (definitionObject имеет значение null).

Кажется, я не могу найти причину этого, конструктор, очевидно, вызывается без проблем, но новый объект не возвращается.

РЕДАКТИРОВАТЬ: класс определения статистики расширяет класс Unity3D 'ScriptableObject', и это, похоже, проблема. Все еще не уверен, как обойти это


person Joel    schedule 07.04.2015    source источник
comment
Вы можете попробовать Activator.CreateInstance(type, new object [] { newName, newDescription });   -  person Alex    schedule 07.04.2015
comment
Спасибо, но у меня точно такая же проблема. Любые другие идеи?   -  person Joel    schedule 07.04.2015
comment
Итак, если вы поместите точку останова на строку StatTopic.WriteLine(definitionObject);, покажет ли она, что definitionObject равно нулю?   -  person Alex    schedule 07.04.2015
comment
Я уверен, что в коде, который вы здесь не разместили, что-то не так. Попробуйте указать здесь весь фрагмент кода, связанный с этим вопросом. Эта скрипта отлично работает для меня dotnetfiddle.net/hejCNM   -  person Jenish Rabadiya    schedule 07.04.2015
comment
Оказывается, проблема связана с расширением класса ScriptableObject (из Unity3D). Не совсем уверен, почему и стоит ли оставлять этот вопрос открытым, учитывая, что контекст сейчас кажется совершенно другим.   -  person Joel    schedule 07.04.2015


Ответы (1)


Оказывается, проблема связана с расширением класса ScriptableObject (из Unity3D).

Кажется, это основано на том, как Unity должна инициализировать свои объекты.

person Joel    schedule 16.05.2015