C# - 通过反射获取简单类型的用户友好名称?

Cri*_*scu 18 c# reflection types

Type t = typeof(bool);
string typeName = t.Name;
Run Code Online (Sandbox Code Playgroud)

在这个简单的例子中,typeName将具有该值"Boolean".我想知道是否/如何让它说出来"bool".

对于int/Int32,double/Double,string/String也是如此.

Luk*_*keH 39

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
Run Code Online (Sandbox Code Playgroud)

  • 你是我的新英雄.我一直在努力使用字符串操作和正则表达式尝试转换为泛型生成的丑陋类型名称而没有良好的结果.这很完美! (2认同)

Luc*_*ero 5

您称之为"友好名称"是特定于语言的,并不依赖于框架.因此,在框架中包含此信息是没有意义的,并且MS设计指南要求您使用方法名称等的框架名称(例如ToInt32等).

  • 它在框架内。您可以使用 CodeDom 和 CSharpCodeProvider 来获取它。详情请看我的回答。 (3认同)