От строки FullyName к типу объекта - PullRequest
1 голос
/ 25 марта 2009

Кто-нибудь знает, как получить объект Type из FullName?

Например.

string fullName = typeof(string).FullName; 
Type stringType = <INSERT CODE HERE> 
Assert.AreEqual(stringType, typeof(string) 

Ответы [ 2 ]

4 голосов
/ 25 марта 2009
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 «буфер буфера протокола».

1 голос
/ 25 марта 2009
string fullName = typeof(string).FullName; 
Type stringType = Type.GetType(fullName);
Assert.AreEqual(stringType, typeof(string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...