我有以下课程:
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。我在这里查看了现有的答案,但我没有看到明确的答案。
答案 0 :(得分:4)
更新至:
foreach (PropertyInfo propertyInfo in md.GetType().GetProperties())
{
new FormMetaData
{
FormFieldName = propertyInfo.Name,
MetadataLabel = propertyInfo.GetValue(md) // <--
}
}
PropertyInfo.GetValue()
期望对象的实例
包含您尝试获取其值的属性。在你的
foreach
循环,该实例似乎是md
。
另请注意C#中property
和field
之间的区别。属性是具有get
和/或set
:
class MyClass {
string MyProperty {get; set;} // This is a property
string MyField; // This is a field
}
反思时,您需要通过myObj.GetType().GetProperties()
和myObj.GetType().GetFields()
方法分别访问这些成员。