Как создать экземпляр типов значения с помощью отражения

Я хочу создать экземпляр типов значения как System.String, System.Boolean, System.Int32, и т.д. Я получаю полностью определенные имена типов как System.String или MyNamespace.Employee и я должен создать экземпляр и возвратиться назад. Я использую Activator.CreateInstance и FormatterServices.GetUninitializedObject создать экземпляры. Но это перестало работать в случае типов значения. Я не могу трудно кодировать логику в случае типов значения. Мне нужен универсальный способ создать экземпляры и типов значения и ссылочных типов.

9
задан Jay Bazuzi 18 March 2013 в 05:46
поделиться

4 ответа

Что именно вы пытаетесь сделать? FormatterServices.GetUninitializedObject в основном используется кодом сериализации; кроме того, его не следует использовать. Это звучит как будто вам может понадобиться что-то вроде TypeConverter, т.е. (для этих типов)

TypeConverter tc = TypeDescriptor.GetConverter(someType);
object obj = tc.ConvertFromString(s);
11
ответ дан 4 December 2019 в 13:47
поделиться
[

] Что именно терпит неудачу? Я попробовал следующий код, чтобы проверить, есть ли проблема с типами значений: [

]. [
var instance = Activator.CreateInstance(typeof(Int32));
] [

] Это дает мне экземпляр Int32, установленный на 0. [

] [

] Где именно ваш код не работает? Иначе я бы сказал, что проблема заключается в том, как вы загружаете тип, а не в том, как вы создаете экземпляр [

].
3
ответ дан 4 December 2019 в 13:47
поделиться
[

]Для типов значений BCL (и при использовании строк для описания типов) убедитесь, что вы не используете ключевые слова C#, и убедитесь, что тип полностью соответствует пространству имён. Например, C# int успешно создан таким образом с помощью Activator.CreateInstance(...)[

]. [
    object num = Activator.CreateInstance(Type.GetType("System.Int32"));
] [

] Если попытаться использовать языковые псевдонимы типа [] "int" [] или короткие формы типа [] "Int32" [], то попытки будут неудачными.[

].
1
ответ дан 4 December 2019 в 13:47
поделиться
[

] Это работает на меня: [

] [
int x = (int)Activator.CreateInstance(typeof (Int32), true);
]
0
ответ дан 4 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: