从PropertyInfo获取属性值

时间:2018-01-17 21:02:41

标签: c#

我有以下课程:

public class MagicMetadata
{
  public string DataLookupField { get; set; }
  public string DataLookupTable { get; set; }
  public List<string> Tags { get; set; }
}

一个例子,让我们说:

MagicMetadata md = new MagicMetadata
{
  DataLookupField = "Engine_Displacement",
  DataLookupTable = "Vehicle_Options",
  Tags = new List<String>{"a","b","c"}
}

鉴于MagicMetadata实例,我需要为每个属性创建一个新对象,例如:

public class FormMetadataItem 
{
  public string FormFieldName { get; set; }
  public string MetadataLabel { get; set; }
}

所以我按照c# foreach (property in object)... Is there a simple way of doing this?

尝试这样的事情
foreach (PropertyInfo propertyInfo in md.GetType().GetProperties())
{
   new FormMetaData
   {
     FormFieldName = propertyInfo.Name,
     MetadataLabel = propertyInfo.GetValue(metadata.Name) //This doesn't work
   }
}

我不明白的是我如何获得我正在循环的属性的值。我根本不理解documentation。为什么我需要传递它的对象?什么对象?

P.S。我在这里查看了现有的答案,但我没有看到明确的答案。

1 个答案:

答案 0 :(得分:4)

更新至:

foreach (PropertyInfo propertyInfo in md.GetType().GetProperties())
{
   new FormMetaData
   {
     FormFieldName = propertyInfo.Name,
     MetadataLabel = propertyInfo.GetValue(md) // <--
   }
}

PropertyInfo.GetValue()期望对象的实例 包含您尝试获取其值的属性。在你的 foreach循环,该实例似乎是md

另请注意C#中propertyfield之间的区别。属性是具有get和/或set

的成员
class MyClass {
    string MyProperty {get; set;} // This is a property
    string MyField; // This is a field
}

反思时,您需要通过myObj.GetType().GetProperties()myObj.GetType().GetFields()方法分别访问这些成员。