2017-01-28 1 views
2

Ich brauche Namen von wenigen Objekten. Die Namen dürfen ihre Bits nicht enthalten (16/32/64). Actaully mache ich es so object.GetType().Name. Wenn ich Int als Objekt verwende (int.GetType().Name), gibt es int zurück. Aber wenn ich Uint verwende, gibt es uint32 zurück. Ich möchte nur UI bekommen. Gibt es eine bessere Möglichkeit als String.Replace?Nimm den Namen eines Objekts, ohne seinen Bit-Typ zu erhalten

+0

Warum genau wollen Sie 'unit' anstatt' uint32'? Was versuchst du zu erreichen? – Rob

+1

Hmm, nein, du wirst nicht "int" bekommen. Versuchen Sie, sich minimal zu bemühen, einen gültigen Reprodcode zu posten. Wörter wie "int" und "uint" sind * Schlüsselwörter * in der Sprache C#. Die Übersetzung vom Namen des Framework-Typs zum Schlüsselwort erfolgt wahrscheinlich am besten mit einer switch-Anweisung. Oder einfach nicht stören, da es egal ist. –

+0

mögliches Duplikat von [Gibt es eine Möglichkeit, den Alias ​​eines Typs durch Reflektion zu erhalten?] (Http://stackoverflow.com/a/1363309/2803565) –

Antwort

6

Sie können die Compiler-Dienste nutzen, dies zu tun:

static string GetFriendlyTypeName<T>() 
{ 
    var csharpCodeProvider = new Microsoft.CSharp.CSharpCodeProvider(); 
    var codeType = new System.CodeDom.CodeTypeReference(typeof(T)); 
    return csharpCodeProvider.GetTypeOutput(codeType); 
} 

static void Main(string[] args) 
{ 
    Console.WriteLine(GetFriendlyTypeName<Int32>()); //int 
    Console.WriteLine(GetFriendlyTypeName<UInt32>()); //uint 
} 
+0

aber es scheint, dass er Typname von einer Objektinstanz erhalten möchte (oder Variable) –

+2

@ S.Serp Das wäre ein Kinderspiel für jeden Entwickler, einfach "T-Wert" als Parameter für die 'GetFriendlyTypeName' Methode hinzufügen – user3185569

Verwandte Themen