Ich habe folgenden Code:
return "[Inserted new " + typeof(T).ToString() + "]";
Aber
typeof(T).ToString()
Gibt den vollständigen Namen einschließlich des Namespace zurück
Gibt es sowieso nur den Klassennamen (ohne Namespace-Qualifikatoren?)
c#
namespaces
typeof
Leora
quelle
quelle
string1 + anything.ToString() + string2
ist übrigens überflüssig. Der Compiler fügt den AufrufToString
automatisch ein, wenn Sie dies tunstring1 + anything + string2
.Type
typeof(..)
Antworten:
quelle
Name
berücksichtigt keine Typparameter.this.GetType().Name
,this.GetType().FullName
etc. , wenn sie mit Fällen zu tun.Name
berücksichtigt auch keine verschachtelten Typen!Versuchen Sie dies, um Typparameter für generische Typen abzurufen:
Vielleicht nicht die beste Lösung (aufgrund der Rekursion), aber es funktioniert. Die Ausgaben sehen wie folgt aus:
quelle
StringBuilder
(auch der Basisfall, wenn er nicht verwendet wird), dasstring.Join
temporäre und das LINQ-Lambda werden jedoch ignoriert . VerwendenString
Sie es einfach, bis Sie wissen, dass es sich um einen Engpass handelt. / rantNutzen Sie ( Type Properties )
quelle
typeof (T) .Name;
quelle
Nach C # 6.0 (einschließlich) können Sie den Namen des Ausdrucks verwenden:
Hinweis!
nameof
Der Laufzeittyp des zugrunde liegenden Objekts wird nicht abgerufen, sondern nur das Argument zur Kompilierungszeit. Wenn eine Methode eine IEnumerable akzeptiert, gibt nameof einfach "IEnumerable" zurück, während das eigentliche Objekt "List" sein könnte.quelle
nameof
gibt nicht den Namen desType
nameof
den Namen desType
Screenshots mit Beweis überprüft und zurückgegeben : prntscr.com/irfk2cType
, sondern nur das Argument zur Kompilierungszeit. Wenn eine Methode ein akzeptiert,IEnumerable
wirdnameof
einfach "IEnumerable" zurückgegeben, während das eigentliche Objekt "List <string>" sein könnte. Es glaubt nicht, dass es die Frage des OP beantwortet.beste Verwendung:
quelle
obj.GetType().BaseType.Name
kehrt zurück,"TypeInfo"
was nicht die gewünschte Lösung ist, wie ich es erwarte.