string fullName = typeof(string).FullName;
Type stringType = Type.GetType(fullName);
Однако обратите внимание, что при этом выполняется поиск только в вызывающей сборке и основных сборках MS. Лучше сначала использовать либо AssemblyQualifiedName
, либо найти Assembly
, либо использовать Assembly.GetType(fullName)
.
Или:
string qualifiedName = typeof(string).AssemblyQualifiedName;
Type stringType = Type.GetType(qualifiedName);
или
Assembly a = typeof(SomeOtherTypeInTheSameAssembly).Assembly;
Type type = a.GetType(fullName);
Обновление повторных комментариев; обратите внимание, что AssemblyQualifiedName
включает информацию о версиях; это хорошо для использования в таких вещах, как файлы конфигурации, но если (как в данном случае) вы используете это для персистентности, часто лучше использовать независимый от реализации контракт. Например, xml (через XmlSerializer
или DataContractSerializer
) не заботится о конкретных типах, если макет правильный.
Если проблема с пространством, двоичные форматы часто короче - но BinaryFormatter
включает метаданные типа и не зависит от платформы (например, попробуйте использовать их из java). В таких случаях вы можете захотеть взглянуть на пользовательские сериализаторы, такие как protobuf-net , основанный на контрактах, но использующий кроссплатформенный проводной формат Google «буфер буфера протокола».