如何使用反射映射<objects>包含枚举值的列表



如果我有一个对象

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

PartToModify是一个枚举:

public enum PartToModify {
   Engine,
   Tire, 
}

我有一个Part对象:

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

如何使用反射?对于Part上与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 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);

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

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

第二个true参数告诉它忽略大小写。这样你就可以匹配所有的"引擎"、"引擎"one_answers"引擎"等等

您也可以反过来使用查找枚举中的所有名称

string[] myNames = Enum.GetNames(typeof(PartToModify));

相关内容

  • 没有找到相关文章

最新更新