2011-09-02 13 views
13

Próbuję użyć Type.GetType i przekazać pełną nazwę klasy "caLibClient.entity.Web2ImageEntity". CaLibClient.entity to przestrzeń nazw, umieszczona w oddzielnym zestawie (caLibClient) i dodana do listy zestawów referencyjnych programu. Typ.GetType zawsze zwraca Null, gdy wywołuję go z programu, co jest nie tak?Typ.GetType return null

Odpowiedz

24

Trzeba dodać nazwę zespołu, jak również, ponieważ Twój typ nie jest w wykonującego montażu (ani mscorlib.) Tak więc połączenie powinno być:

var myType = Type.GetType("caLibClient.entity.Web2ImageEntity, FullAssemblyName"); 

Z Type.GetType() docs:

typeName
Rodzaj: System.String
Nazwa kwalifikowana do montażu typu. Zobacz AssemblyQualifiedName. Jeśli typ znajduje się w aktualnie wykonywanym zespole lub w pliku Mscorlib.dll, wystarczy podać nazwę typu zakwalifikowaną według jej przestrzeni nazw.

Z docs for AssemblyQualifiedName, jest to nazwa próbki:

TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089 

Aktualizacja: Jeśli jesteś już odwołanie do zamontowania w swoim projekcie i wiedzieć w czasie kompilacji, co nazwa-typ jest lepiej powiedzenie, że teraz nie trzeba wyszukiwać typu w czasie wykonywania, lepiej jest powiedzieć: kompilator zrobi wszystko za Ciebie.

+0

Jak znaleźć pełną nazwę zespołu? Nie jestem pewien, czy rozumiem poprawnie, co to znaczy. Gdzie patrzeć? – Tomas

+0

@ Tomy Jaka jest nazwa zestawu, do którego się odwołujesz? – dlev

1

Trzeba zdać assembly qualified name, w Twoim przypadku coś takiego:

var yourType = Type.GetType("caLibClient.entity.Web2ImageEntity,caLibClient"); 
+0

Nadal dostaję zero – Tomas

1

Jeśli znasz typ w zespole, który typ docelowy mieszka w was może uniknąć twardego kodowania pełnej nazwy kwalifikowanej zespołu. Na przykład:

Type.GetType(
    "MyAssembly.Foo.BarSubclass, " + typeof(MyAssembly.Foo.IBar).Assembly.FullName)