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);