遍历对象中的对象属性

Loop through objects properties in an object

我有一个像下面这样的对象

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 字段中设置填充属性的百分比 return 它。我怎样才能做到这一点,我已经在下面尝试过但无法做到这一点

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

首先,您需要获取相关对象的实例(您已在上面的代码中完成此操作。

var value = property.GetValue(mainObject);

然后您需要计算该对象中包含多少个属性。为此,我们需要先获取属性。

var subProperties = property.PropertyType.GetProperties();
var propertyCount = subProperties.Length;

现在我们需要检查每个属性以查看是否设置了值。

var populatedCount = 0;

foreach (var subProperty in subProperties)
{
    if (!string.IsNullOrEmpty(subProperty.GetValue(value)))
    {
        populatedCount++;
    }
}

然后取百分比。

var percentage = (float)populatedCount / propertyCount;