Użyłem metody pomocnika, który wyszukuje wszystkie załadowane Assembly s dla Type odpowiadającej określonej nazwie. Mimo że w moim kodzie oczekiwano tylko jednego wyniku typu, który obsługuje wiele. Weryfikuję, że tylko jeden wynik jest zwracany za każdym razem, gdy go używałam i sugeruję, abyś zrobił to samo.
/// <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();
}
Czy zdajesz sobie sprawę, że możesz mieć wiele różnych klas o nazwie TheClass w projekcie, do którego dodano wiele referencji, a plik, w którym próbujesz rozwiązać typ, zawiera wiele instrukcji użycia? Powinieneś przekazać w pełni kwalifikowaną nazwę, w tym obszar nazw, np. Gdy odwołasz się do dokumentu, który napiszesz Imię i nazwisko. Które z wielu klas TheClass powinien używać kompilator w przypadku wielu obecnych? Namespace mówi, który. –
Wrzuciłbym 'ArgumentException' zamiast tylko zwrócić' null'. Nie można odróżnić bez 'Namespace' – gdoron
możliwego duplikatu [Getting a System.Type z częściowej nazwy typu] (http://stackoverflow.com/questions/179102/getting-a-system-type-from-types-partial -name) – nawfal