2013-03-18 8 views
3

Можно реализовать метод, какКак получить псевдоним типа?

string GetFriendlyName(Type type) { ... } 

в .NET, который будет возвращать CLR alias типа, если это возможно? В этом случае GetFriendlyName(typeof(Foo)) возвращает «Foo», но GetFriendlyName(typeof(int)) возвращает «ИНТ» вместо «Int32», как в MemberInfo.Name

+0

Это специальные псевдонимы C#, не определенные CLR. Это может смутить разработчиков, не являющихся разработчиками C#, если вы отобразите их в другом контексте. –

ответ

6

Ну, я не верю, что нет никакого способа сделать это programmaticly. Вы можете использовать вместо него dictionary;

public static readonly Dictionary<Type, string> aliases = new Dictionary<Type, string>() 
{ 
    { typeof(string), "string" }, 
    { typeof(int), "int" }, 
    { typeof(byte), "byte" }, 
    { typeof(sbyte), "sbyte" }, 
    { typeof(short), "short" }, 
    { typeof(ushort), "ushort" }, 
    { typeof(long), "long" }, 
    { typeof(uint), "uint" }, 
    { typeof(ulong), "ulong" }, 
    { typeof(float), "float" }, 
    { typeof(double), "double" }, 
    { typeof(decimal), "decimal" }, 
    { typeof(object), "object" }, 
    { typeof(bool), "bool" }, 
    { typeof(char), "char" } 
}; 

EDIT: Я нашел два вопроса дать ответ

+1

+1, я собирался опубликовать то же самое! –

3

Вы можете попробовать этот способ:

private string GetFriendlyName(Type type) 
{ 
    Dictionary<string, string> alias = new Dictionary<string, string>() 
     { 
      {typeof (byte).Name, "byte"}, 
      {typeof (sbyte).Name, "sbyte"}, 
      {typeof (short).Name, "short"}, 
      {typeof (ushort).Name, "ushort"}, 
      {typeof (int).Name, "int"}, 
      {typeof (uint).Name, "uint"}, 
      {typeof (long).Name, "long"}, 
      {typeof (ulong).Name, "ulong"}, 
      {typeof (float).Name, "float"}, 
      {typeof (double).Name, "double"}, 
      {typeof (decimal).Name, "decimal"}, 
      {typeof (object).Name, "object"}, 
      {typeof (bool).Name, "bool"}, 
      {typeof (char).Name, "char"}, 
      {typeof (string).Name, "string"} 
     }; 
    return alias.ContainsKey(type.Name) ? alias[type.Name] : type.Name; 
} 

Предлагаю вам сделать alias словарь static readonly для повышения эффективности.

Смежные вопросы