【问题标题】:How to print prop name of a class in C# [duplicate]如何在C#中打印类的道具名称[重复]
【发布时间】: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));
  • 这将打印出字段的名称,不是属性。

标签: c#


【解决方案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() 来获取表示集合中所有项目的连接值的字符串。如果你愿意,你可以编写一个扩展方法来做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多