Я хочу создать экземпляр типов значения как , System.String
System.Boolean
, System.Int32
, и т.д. Я получаю полностью определенные имена типов как System.String
илиMyNamespace.Employee
и я должен создать экземпляр и возвратиться назад. Я использую Activator.CreateInstance
и FormatterServices.GetUninitializedObject
создать экземпляры. Но это перестало работать в случае типов значения. Я не могу трудно кодировать логику в случае типов значения. Мне нужен универсальный способ создать экземпляры и типов значения и ссылочных типов.
Что именно вы пытаетесь сделать? FormatterServices.GetUninitializedObject
в основном используется кодом сериализации; кроме того, его не следует использовать. Это звучит как будто вам может понадобиться что-то вроде TypeConverter
, т.е. (для этих типов)
TypeConverter tc = TypeDescriptor.GetConverter(someType);
object obj = tc.ConvertFromString(s);
] Что именно терпит неудачу? Я попробовал следующий код, чтобы проверить, есть ли проблема с типами значений: [
]. [var instance = Activator.CreateInstance(typeof(Int32));
]
[] Это дает мне экземпляр Int32, установленный на 0. [
] [] Где именно ваш код не работает? Иначе я бы сказал, что проблема заключается в том, как вы загружаете тип, а не в том, как вы создаете экземпляр [
].]Для типов значений BCL (и при использовании строк для описания типов) убедитесь, что вы не используете ключевые слова C#, и убедитесь, что тип полностью соответствует пространству имён. Например, C# int успешно создан таким образом с помощью Activator.CreateInstance(...)[
]. [ object num = Activator.CreateInstance(Type.GetType("System.Int32"));
]
[] Если попытаться использовать языковые псевдонимы типа [] "int" [
] или короткие формы типа [] "Int32" [
], то попытки будут неудачными.[
] Это работает на меня: [
] [int x = (int)Activator.CreateInstance(typeof (Int32), true);
]