it-swarm.com.de

Wie erhält man den Klassentyp anhand seines Klassennamens?

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 mir jemand helfen. THX Ich darf nur die Stringform dieses Klassennamens verwenden, um seinen Typ zu erhalten.

danke an alle .. Ich habe diese Frage von mir selbst so gelöst.

{
      Type t = Type.GetType(string.Concat(viewModel, ",", "Myspace"));
}
15
Huan Fu

verwenden Sie einfach die Funktion typeof (). Der Parameter ist nur der Klassenname. 

Type type = typeof(FIXProtoClientTest);

MSDN auf typeof ()

28
Shen liang

Im Allgemeinen müssen Sie kaum Typvergleiche durchführen, es sei denn, Sie arbeiten mit Reflektionen oder Schnittstellen. Dennoch:

Wenn Sie den Typ kennen, mit dem Sie ihn vergleichen möchten, verwenden Sie als oder die Operatoren:

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

Der as-Operator führt eine Umwandlung aus, die den Wert null zurückgibt, wenn er fehlschlägt, und keine Ausnahme:

TypeIKnow typed = unknownObject as TypeIKnow;

Wenn Sie den Typ nicht kennen und nur Informationen zum Laufzeittyp wünschen, verwenden Sie die Methode .GetType () :

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));
2
Backtrack

Ihre Zeile Type.GetType (Modell) funktioniert, wenn Sie den vollständig qualifizierten Klassennamen einschließlich des Namespaces verwenden. 

Wenn es sich in einer anderen Assembly als im Aufrufcode befindet, sollten Sie Assembly.GetType (typeName) verwenden, wenn das Assembly-Objekt eine Instanz der Assembly ist, die den Typ enthält.

0
tker