C# 如何使用反射映射列表<;对象>;包括枚举值的

C# 如何使用反射映射列表<;对象>;包括枚举值的,c#,reflection,enums,C#,Reflection,Enums,如果我有目标 public class Car { public List<UpdatePart> updatePartList {get; set;} } public class UpdatePart { public PartToModify PartToModify {get; set;} public string NewValue {get;set} } 我有一个部分对象: public class Part { public string Engi

如果我有目标

public class Car {
  public List<UpdatePart> updatePartList {get; set;}

}

public class UpdatePart {
  public PartToModify PartToModify {get; set;}
  public string NewValue {get;set}
}
我有一个部分对象:

public class Part {
  public string Engine {get;set;}
  public string Tire   {get;set;}
  public decimal price {get;set;}

}
如何使用反射,对于与PartToModify中的枚举匹配的零件上的每个属性,创建一个新的UpdatePart对象,并选择PartToModify==Part.property的正确枚举,并将Part.property的值分配给UpdatePart.NewValue

我想:

var partProperties = partObj.GetType().GetProperties();
foreach (var property on updatePartProperties) {
  UpdatePartList.Add(MapProperties(partProperties, part));
}

 public UpdatePart MapProperties(PropertyInfo partProperties, Part partObj){
   //pseudo code
   var updatePart = new UpdatePart();
   foreach(var property on partProperties) {
      if (property.Name == <iterate through enum values until one is found>)
         updatePart.PartToModify = PartToModify.<somehow select value that matches property.name>
          updatePart.NewValue = property.GetValue(partObj, null);
   }

   return updatePart;
 }
var partProperties=partObj.GetType().GetProperties();
foreach(updatePartProperties上的var属性){
添加(MapProperties(partProperties,part));
}
公共更新部件映射属性(PropertyInfo partProperties,Part partObj){
//伪码
var updatePart=new updatePart();
foreach(partProperties上的var属性){
如果(property.Name==)
updatePart.PartToModify=PartToModify。
updatePart.NewValue=property.GetValue(partObj,null);
}
返回updatePart;
}

很明显你知道我在做什么,有什么想法吗?不,这不是学校的项目。整个“汽车”的例子是我提出的最接近实际物体的最快的例子,因为我不想只写下我想要完成的东西,想提供一个示例。

我不完全确定您在这里尝试做什么,但要通过枚举的字符串值查找枚举值,可以使用
enum.Parse
enum.TryParse
。 你可以这样做:

PartToModify result;
if (Enum.TryParse<PartToModify>("Engine", true, out result))
{
  /* found a match. It's in result */
}

我不完全确定您在这里要做什么,但要通过枚举的字符串值查找枚举的值,可以使用
enum.Parse
enum.TryParse
。 你可以这样做:

PartToModify result;
if (Enum.TryParse<PartToModify>("Engine", true, out result))
{
  /* found a match. It's in result */
}

我也不明白你想做什么。我想根据属性的名称选择一个枚举值。我想Bob Vale正是我所需要的。我也不明白你想做什么。我想根据属性的名称选择一个枚举值。我认为Bob Vale正是我所需要的。我仍然面临的问题是,尽管我可以找到property.name==枚举值的位置,但我如何回过头来选择该枚举,如PartToModify。我仍然面临的问题是,尽管我可以找到property.name==枚举值的位置,如何翻转并选择该枚举(如PartToModify)。
string[] myNames = Enum.GetNames(typeof(PartToModify));
var partNames=Enum.GetNames(typeof(PartToModify));
var parts = from pi in partObj.GetType.GetProperties()
            where partNames.Contains(pi.Name)
            select new UpdatePart { 
                         PartToModify = (partToModify)Enum.Parse(typeof(PartToModify),pi.Name),
                         NewValue=pi.GetValue(partObj,null)
                       };
foreach (var part in parts) UpdateList.Add(part);