2013-08-19 11 views
5
namespace Myspace 
{ 
    public class MyClass 
    { 
    } 
} //This class is in another file. 

using Myspace; 
static void Main(string[] args) 
{ 
    Regex regexViewModelKey = new Regex(RegularExpr.ViewModelKeyPattern); 
    string viewModel = regexViewModelKey.Match(match.Value).Value; 
    //Now, vieModel is a string, and its value is "MyClass". So, I only know the class name, this is why I ask this question. 

    //Now, I'm only allowed to use the string form of this class name to get its type. 
    //I have tyied like this, but its no use. 
    Type t = Type.GetType(viewModel); 
    //it's return a null. 

    //Then I tyied another method like this, but there is an exception when calling Assembly.Load 
    Assembly assembly = Assembly.Load("Myspace"); 
    Type ty = assembly.GetType("Myspace" + viewModel); 
} 

Ich hoffe meine Frage ist klar. Kann jemand mir helfen.THX Ich bin nur erlaubt, die Zeichenkette dieses Klassennamens zu verwenden, um seinen Typ zu erhalten.Wie erhält man den Klassentyp über seinen Klassennamen?

thx jeder. Ich habe diese Frage selbst so gelöst.

+0

vielleicht wird dies helfen http://stackoverflow.com/questions/17045635/how-to-store-reference-to-class-property-and-access-an-instances- property-by-t – user1306322

+1

Versuchen Sie diesen Weg string model = "Mypace.MyClass"; Verwenden Sie stattdessen den Assembly-qualifizierten Namen – Devesh

+0

http://stackoverflow.com/questions/648160/how-do-i-create-an- instance- from-a-string-in-c –

Antwort

2

Im Allgemeinen werden Sie kaum jemals Typvergleiche durchführen müssen, es sei denn, Sie tun etwas mit Reflexion oder Interfaces. Dennoch:

Wenn Sie die Art wissen Sie, mit ihm vergleichen möchten, verwenden Sie die oder als Betreiber:

if(unknownObject is TypeIKnow) { // run code here 

Der als Operator eine Besetzung führt, die null zurückgibt, wenn es nicht eher als eine Ausnahme:

TypeIKnow typed = unknownObject as TypeIKnow; 

Wenn Sie nicht die Art wissen und nur Laufzeittypinformationen, verwenden Sie die .GetType() Methode:

Type typeInformation = unknownObject.GetType(); 



    // int is a value type 
    int i = 0; 
    // Prints True for any value of i 
    Console.WriteLine(i.GetType() == typeof(int)); 

    // string is a sealed reference type 
    string s = "Foo"; 
    // Prints True for any value of s 
    Console.WriteLine(s == null || s.GetType() == typeof(string)); 

    // object is an unsealed reference type 
    object o = new FileInfo("C:\\f.txt"); 
    // Prints False, but could be true for some values of o 
    Console.WriteLine(o == null || o.GetType() == typeof(object)); 

// Get the type of a specified class. 
       Type myType1 = Type.GetType("System.Int32"); 
       Console.WriteLine("The full name is {0}.", myType1.FullName); 
       // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException. 
       Type myType2 = Type.GetType("NoneSuch", true); 
       Console.WriteLine("The full name is {0}.", myType2.FullName); 

    // FileSystemInfo is an abstract type 
    FileSystemInfo fsi = new DirectoryInfo("C:\\"); 
    // Prints False for all non-null values of fsi 
    Console.WriteLine(fsi == null || fsi.GetType() == typeof(FileSystemInfo)); 
+0

Ich habe meine Frage geändert, damit es klarer wird. Kannst du es nochmal sehen? thx –

0

Ihre Zeile Type.GetType (Modell) funktioniert, wenn Sie den vollständig qualifizierten Klassennamen einschließlich seines Namespace verwenden. Wenn es in einer anderen Assembly als der Code ist, der den Aufruf ausführt, sollten Sie Assembly.GetType (typeName) verwenden, wenn das Assembly-Objekt, auf das verwiesen wird, eine Instanz der Assembly ist, die den Typ enthält.

13

Verwenden Sie einfach die Funktion typeof(). Der Parameter ist nur dieser Klassenname.

Type type = typeof(FIXProtoClientTest); 

MSDN on typeof()

+2

Nur wenn der Typ zur Kompilierzeit bekannt ist. – Alejandro

Verwandte Themen