Возвращает null при выполнении Type.GetType ("System.Collections.Generi c .SortedDictionary`2 [System.String, System.String]"); - PullRequest
1 голос
/ 09 мая 2020

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

Он работает: Type.GetType("System.Collections.Generic.Dictionary`2[System.String,System.String]");

Не работает и всегда возвращает нулевое значение: Type.GetType("System.Collections.Generic.SortedDictionary`2[System.String,System.String]");

Почему и как мне почини это? Спасибо.

1 Ответ

1 голос
/ 09 мая 2020

Метод Type.GetType(string) может возвращать тип по его имени, только если этот тип находится либо в текущей исполняемой сборке, либо в mscorlib.dll. Для других типов необходимо указать assembly qualified name.

Dictionary<TKey, TValue> находится в mscorlib.dll (для .NET Framework), поэтому

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,System.String]");

смог вернуть свой тип.

SortedDictionary<TKey, TValue> находится в System.dll, поэтому

Type.GetType("System.Collections.Generic.SortedDictionary`2[System.String,System.String]");

вернул null.

Чтобы получить тип SortedDictionary<TKey, TValue>, нам нужно указать его assembly qualified name:

Type.GetType(
    "System.Collections.Generic.SortedDictionary`2[" +
    "[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]," +
    "[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" +
    ", System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

Вот demo , который показывает

...