Почему System.Type.GetType («Xyz») возвращает null, если существует typeof (Xyz)?

Я столкнулся со странным поведением в моем (огромном) проекте .NET 4. В какой-то момент кода я имею в виду полностью определенный тип, скажем:

System.Type type = typeof (Foo.Bar.Xyz);

позже я делаю это:

System.Type type = System.Type.GetType ("Foo.Bar.Xyz");

и возвращаю null . Я не могу понять, почему это происходит, потому что мое имя типа правильное, и я проверил другие типы, и они были правильно разрешены. Более того, следующий запрос LINQ находит тип:

var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies ()
            from assemblyType in assembly.GetTypes ()
            where assemblyType.FullName == typeName
            select assemblyType;

System.Type type = types.FirstOrDefault ();

Существуют ли какие-либо причины, по которым System.Type.GetType может завершиться ошибкой?

Мне наконец пришлось прибегнуть к этому фрагменту кода вместо ] GetType :

System.Type MyGetType(string typeName)
{
    System.Type type = System.Type.GetType (typeName);

    if (type == null)
    {
        var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies ()
                    from assemblyType in assembly.GetTypes ()
                    where assemblyType.FullName == typeName
                    select assemblyType;

        type = types.FirstOrDefault ();
    }

    return type;
}
18
задан Pierre Arnaud 22 September 2010 в 12:01
поделиться