Подтвердить что ты не робот

Избегайте указывать имя пространства имен в Type.GetType()

Type.GetType("TheClass");

Возвращает null, если namespace отсутствует, например:

Type.GetType("SomeNamespace.TheClass"); // returns a Type object 

Есть ли способ избежать присвоения имени namespace?

4b9b3361

Ответ 1

Я использовал вспомогательный метод, который ищет все загруженные Assembly для Type соответствующий указанному имени. Несмотря на то, что в моем коде ожидается только один результат типа, он поддерживает несколько. Я проверяю, что только один результат возвращается каждый раз, когда я его использовал, и предлагаю вам сделать то же самое.

/// <summary>
/// Gets a all Type instances matching the specified class name with just non-namespace qualified class name.
/// </summary>
/// <param name="className">Name of the class sought.</param>
/// <returns>Types that have the class name specified. They may not be in the same namespace.</returns>
public static Type[] getTypeByName(string className)
{
    List<Type> returnVal = new List<Type>();

    foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
    {
        Type[] assemblyTypes = a.GetTypes();
        for (int j = 0; j < assemblyTypes.Length; j++)
        {
            if (assemblyTypes[j].Name == className)
            {
                returnVal.Add(assemblyTypes[j]);
            }
        }
    }

    return returnVal.ToArray();
}

Ответ 2

Этот параметр, который метод ожидает получить, нет. Вы не можете.

typeName: имя типа, присвоенное его пространством имен.

MSDN

Как вы ожидаете различать два класса с тем же именем, но с другим пространством имен?

namespace one
{
    public class TheClass
    {
    }
}

namespace two
{
    public class TheClass
    {
    }
}

Type.GetType("TheClass") // Which?!