【发布时间】:2021-05-20 22:12:46
【问题描述】:
我有以下课程
public class HydronicEquipment
{
public List<LibraryHydronicEquipment> Source { get; set; }
public List<LibraryHydronicEquipment> Distribution { get; set; }
public List<LibraryHydronicEquipment> Terminals { get; set; }
}
然后我有下面的“libraryHydronicEquipment”类
public class LibraryHydronicEquipment : IEquipmentRedundancy
{
public string Name { get; set; }
public RedundancyStatus RedundancyStatus { get; set; }
public EquipmentRedundancy EquipmentRedundancy { get; set; }
}
我正在尝试连接来自所有三个属性(即来自源、分发和终端)的“LibraryHydronicEquipment”对象列表,一般连接方法如下所示
var source = hydronicEquipment.Source;
var distribution = hydronicEquipment.Distribution;
var teriminals = hydronicEquipment.Terminals;
Source.Concat(Distribution).Concat(Terminals)
我正在尝试使用反射来实现相同的效果,代码如下所示
foreach (var (systemName, hydronicEquipment) in hydronicSystemEquipment)
{
bool isFirstSystem = true;
var equipmentList = new List<string> { "Source", "Distribution", "Terminals" };
var redundancyequipmentList = GetRedundancyEquipment(hydronicEquipment, equipmentList);
}
GetRedundancyEquipment 的方法如下所示
private static IEnumerable<IEquipmentRedundancy> GetRedundancyEquipment(HydronicEquipment hydronicEquipment, List<string> equipmentList)
{
IEnumerable<IEquipmentRedundancy> equipmentRedundancies = new List<IEquipmentRedundancy>();
dynamic equipmentResults = null;
foreach(var equipment in equipmentList)
{
var componentList = hydronicEquipment.GetType().GetProperty(equipment).GetValue(hydronicEquipment, null) as IEnumerable<IEquipmentRedundancy>;
equipmentResults = equipmentRedundancies.Concat(componentList);
}
return equipmentResults;
}
这里的问题是,即使我的 Source 有对象列表,而 Distribution 有对象列表,equipmentResults 只给出一个对象而不是串联对象列表。
我正在尝试使用反射方法最后返回IEnumerable<IEquipmentRedundancy>,但它似乎不适用于上述代码。
谁能告诉我如何实现这一点,非常感谢。
【问题讨论】:
-
当你说“只给一个对象”时,它给了你什么对象?
-
它只是给单个
IEquipmentRedundancy反过来它正在发送最后一个对象 -
添加只读属性怎么样
public class HydronicEquipment { public List<LibraryHydronicEquipment> Source { get; set; } public List<LibraryHydronicEquipment> Distribution { get; set; } public List<LibraryHydronicEquipment> Terminals { get; set; } public List<LibraryHydronicEquipment> AllSources { get { return Source.Concat(Distribution).Concat(Terminals) } } } -
@RodRamírez,我正在尝试使用反射来实现
-
@EnigmaState 检查我上面的评论
标签: c# .net linq reflection c#-7.0