如何在C#中打印类的道具名称[重复]

Posted

技术标签:

【中文标题】如何在C#中打印类的道具名称[重复]【英文标题】:How to print prop name of a class in C# [duplicate] 【发布时间】:2016-12-31 20:49:06 【问题描述】:

我有一个名为 MyClass 的类,它有很多属性

class MyClass

    public int Id  get; set; 

    public string Name  get; set; 

    public string email  get; set; 

    public string password  get; set; 

    public string city  get; set; 

我想在 Console.writeline 中打印属性名称,如

static void Main(string[] args)
    
        MyClass m = new MyClass();
        var s = m.GetType()
                 .GetFields();
        Console.WriteLine(s);



        Console.ReadKey();
    

但它每次都给我

System.Reflection.FieldInfo[]

请告诉我我该怎么做,或者我能不能做到这一点

【问题讨论】:

您正在尝试打印出一个对象数组,您希望它做什么? Console.WriteLine(string.Join(", ", s)); 这将打印出字段的名称,不是属性。 【参考方案1】:

虽然它们在语法上看起来很相似,但属性不是字段。请改用GetProperties

var props = m.GetType().GetProperties();

var props = typeof(MyClass).GetProperties();

应该这样打印:

foreach (var p in props) 
    Console.WriteLine(p.Name);

【讨论】:

建议 typeof 避免实例化类型的好点【参考方案2】:

如果您使用的是 c#6,现在有一个不错的 nameof 关键字

nameof(email) returns "email"

那么它们是早期的 CallerMemberName 属性,可以附加到方法调用上

public void MemberName([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")

那你有反思

Console.WriteLine("Properties of System.Type are:");
foreach (PropertyInfo myPropertyInfo in typeof(MyClass).GetProperties())

    Console.WriteLine(myPropertyInfo.ToString());

【讨论】:

【参考方案3】:

我知道其他人也有类似的答案,但我只是想添加一些其他项目。先上代码:

IEnumerable<string> names = typeof(MyClass ).GetProperties().Select(prop => prop.Name);

foreach (var name in names)

   Console.WriteLine(name);

正如其他人所指出的,您对这里的属性(而不是字段)感兴趣。如果我将 GetProperties() 调用更改为 GetFields(),它将返回一个空集合。但是,如果我将其更改为 GetFields(BindingFlags.NonPublic | BindingFlags.Instance),它将给我支持字段的名称(我怀疑这不是您要查找的内容)。

我想补充的另一件事是 ToString() 并不总是按照您的期望进行。在许多情况下(如上述),您只需获取类型本身的名称(而不是内容)。作为推论,您通常不能只执行 ToString() 来获取表示集合中所有项目的连接值的字符串。如果你愿意,你可以编写一个扩展方法来做到这一点。

【讨论】:

以上是关于如何在C#中打印类的道具名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅打印Python中类的名称[重复]

如何在 iOS 二进制文件中打印所有 Objective-C 类的名称?

如何在c#中访问内部类中的外部类的变量[重复]

如何在反应组件中打印道具数据?

如何在OnExceptionAsync c#中获取引发异常的方法名称[重复]

如何在 C# 中使用正则表达式解析重复的名称-值对