visual variable tipos studio numericas funciones float ejemplos datos c# reflection types

variable - C#: ¿obtiene un nombre fácil de usar para los tipos simples a través de la reflexión?



variable int (7)

Type t = typeof(bool); string typeName = t.Name;

En este ejemplo simple, typeName tendría el valor "Boolean" . Me gustaría saber si / cómo puedo conseguir que diga "bool" lugar.

Lo mismo para int / Int32, double / Double, string / String.


Diría que no puede, ya que esos nombres son específicos de C # y, como tal, no producirán el mismo resultado si el desarrollador desea usar VB.NET.

Obtiene el tipo CLR y eso es realmente lo que le gustaría poder recrear el tipo más tarde. Pero siempre puedes escribir un mapeador de nombres.


El .NET Framework en sí mismo no conoce las palabras clave específicas de C #. Pero dado que solo hay una docena de ellos, puede simplemente crear manualmente una tabla que contenga los nombres que desea.

Esto podría ser un Dictionary<Type,string> :

private static Dictionary<Type,string> friendlyNames=new Dictionary<Type,string>(); static MyClass()//static constructor { friendlyNames.Add(typeof(bool),"bool"); ... } public static string GetFriendlyName(Type t) { string name; if( friendlyNames.TryGet(t,out name)) return name; else return t.Name; }

Este código no reemplaza Nullable<T> con T? y no transforma los genéricos en la forma que utiliza C #.


Los "nombres amigables" como los llama son específicos del idioma y no están vinculados al marco. Por lo tanto, no tiene sentido tener esta información en el marco, y las pautas de diseño de MS requieren que utilice los nombres de los marcos para nombres de métodos, etc. (como ToInt32 etc.).


Por lo que entiendo, bool , string , int , etc. son solo alias para nosotros los desarrolladores de C #.

Después de que el compilador procesa un archivo, no hay más de ellos presentes.


Siempre puedes crear un diccionario para traducir los nombres de C # a los "amigos" que quieras:

Dictionary<System.Type, string> dict = new Dictionary<System.Type, string>(); dict[typeof(System.Boolean)] = "bool"; dict[typeof(System.string)] = "string"; // etc...


no puedes Esas son todas palabras clave específicas de C #. Pero puedes mapearlos fácilmente:

switch (Type.GetTypeCode(t)) { case TypeCode.Byte: return "byte"; case TypeCode.String: return "string"; }

etc


using CodeDom; using Microsoft.CSharp; // ... Type t = typeof(bool); string typeName; using (var provider = new CSharpCodeProvider()) { var typeRef = new CodeTypeReference(t); typeName = provider.GetTypeOutput(typeRef); } Console.WriteLine(typeName); // bool