【发布时间】:2021-11-20 20:55:13
【问题描述】:
我有一个像下面这样的对象
public class MainObj
{
public int BankDetailPercentage { get; set; }
public int PersonalDetailPercentage { get; set; }
public BankDetail BankDetail { get; set; }
public PersonalDetail PersonalDetail { get; set; }
}
public class BankDetail
{
public string Name { get; set; }
public string Branch { get; set; }
public string AccountNumber { get; set; }
}
public class PersonalDetail
{
public string Name { get; set; }
public string address { get; set; }
}
我需要遍历该 MainObj 对象并找到填充了多少 BankDetail 和 PersonalDetail 对象的属性,并在此基础上设置 MainObj 对象的 BankDetailPercentage 和 PersonalDetailPercentage 字段中填充属性的百分比并返回它。我该如何做到这一点,我在下面尝试过,但无法做到这一点
public MainObject calculatePercentage(MainObject mainObject)
{
int bdCount = 0, pdCount = 0, bdTotal = 3, pdTotal = 2;
PropertyInfo[] properties = typeof(MainObject).GetProperties();
foreach (var property in properties)
{
var value = property.GetValue(mainObject);
if (property.Name == "BankDetail")
{
//
}
}
return mainObject;
}
【问题讨论】:
-
是否有令人信服的理由使用反射来完成这项任务,而不是简单地检查每个 BankDetail 和 PersonalDetail 的单独值?
-
@AndrewH 不是真的,但问题是这个 MainObj 有许多类似的对象,如 BankDetail 和 PersonalDetail 有很多属性,我想检查各个值会非常乏味。
-
反射应该保留用于特殊情况,因为它具有检查每个单独属性(虽然乏味)没有的性能影响。我认为您将花费更多时间编写带有反射的代码,以尝试解决您的问题并在您的数据合约发生变化并且您有令人困惑的反射代码要更新时产生未来的技术债务。简单的解决方案是花时间检查您真正关心的值是否不为空,或者添加其他属性来跟踪是否已填充所有必需值并且可以简单地检查这些值。
标签: c# .net loops object reflection