Frage

Angenommen, Sie haben eine MethodInfo zur Methode myMethod:

void myMethod(int param1, int param2) { }

und Sie möchten eine Zeichenfolge erstellen, die die Signatur der Methode darstellt:

string myString = "myMethod (int, int)";

Beim Durchlaufen der MethodInfo-Parameter konnte ich diese Ergebnisse erzielen, indem ich die ToString-Methoden der Parametertypen aufrief:

"myMethod (System.Int32, System.Int32)"

Wie kann ich dies verbessern und die oben gezeigten Ergebnisse erzielen?

War es hilfreich?

Lösung

Diese Frage wurde bereits gestellt, und es kann durch die Codedom-API erfolgen.Siehe Dies und das .Beachten Sie, dass diese Schlüsselwörter (Int, Bool usw.) sprachspezifisch sind. Wenn Sie dies für einen allgemeinen .NET-Consumer ausgeben, sind die Namenstypnamen normalerweise bevorzugt.

Andere Tipps

Soweit ich weiß, gibt es nichts eingebautes, das das konvertieren kann real Typname eines Primitivs (System.Int32) zum integrierten Alias ​​(int).Da es nur eine sehr kleine Anzahl dieser Aliase gibt, ist es nicht allzu schwierig, eine eigene Methode zu schreiben:

public static string GetTypeName(Type type) 
{
    if (type == typeof(int))  // Or "type == typeof(System.Int32)" -- same either way
        return "int";
    else if (type == typeof(long))
        return "long";
    ...
    else
        return type.Name;     // Or "type.FullName" -- not sure if you want the namespace
}

Davon abgesehen, wenn der Benutzer tatsächlich tat eintippen System.Int32 statt int (was natürlich völlig legal wäre) Diese Technik würde immer noch „int“ ausdrucken.Dagegen kann man nicht viel machen, weil System.Type ist in beiden Fällen gleich – Sie können also nicht herausfinden, welche Variante der Benutzer tatsächlich eingegeben hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top