У меня есть класс, который имеет дюжину или около того свойств, которые представляют различные финансовые поля. У меня есть другой класс, который должен выполнять некоторые вычисления по каждому из этих полей отдельно. Код внутри этих методов расчета идентичен, кроме поля, в котором он вычисляет.Как передать свойство класса в качестве параметра метода?
Есть ли способ, которым я могу передать имя свойства в качестве параметра и только один метод, который выполняет всю выполняющую работу вместо 12 методов для каждого свойства?
Кроме того, я уверен, что это может быть достигнуто с помощью отражения, но я видел в другом коде, где лямбды используются таким же образом и было интересно, является ли это кандидатом, где это можно использовать.
В соответствии с просьбой, вот пример:
public class FinancialInfo
{
public virtual DateTime AuditDate { get; set; }
public virtual decimal ReleasedFederalAmount { get; set; }
public virtual decimal ReleasedNonFederalAmount { get; set; }
public virtual decimal ReleasedStateAmount { get; set; }
public virtual decimal ReleasedLocalAmount { get; set; }
public virtual decimal ReleasedPrivateAmount { get; set; }
// more fields like this
}
public class FinancialLedger()
{
public virtual DateTime? BeginDate { get; set; }
public virtual DateTime? EndDate { get; set; }
public virtual IList<FinancialInfo> Financials { get; set; } //not actual implementation, but you get the idea
public decimal GetTotalReleasedFederalAmountByDate()
{
if (BeginDate == null && EndDate == null)
return 0;
decimal total = 0;
foreach (var fi in Financials)
{
if (someCondition)
if (someSubCondition)
total += fi.ReleasedFederalAmount;
else if (someOtherCondition)
if (someOtherSubCondition)
total += fi.ReleasedFederalAmount;
else if (anotherCondigion)
total += fi.ReleasedFederalAmount;
}
return total;
}
public decimal GetTotalReleasedNonFederalAmountByDate()
{
// same logic as above method,
// but it accesses fi.ReleasedNonFederalAmount;
}
// More methods the same as the previous, just accessing different
// members of FinancialInfo
}
Моя цель состоит в том, чтобы просто сделать один метод, называемый GetTotalAmountByDate() и передать в даты начала и дата окончания и наименование имущества (ReleasedFederalAmount или ReleasedLocalAmount и т. Д.) Ему необходимо получить доступ.
Надеюсь, это точно отражает то, что я пытаюсь выполнить.
будет легче ответить, если вы можете поделиться пример такой функции и представление о свойствах класса. –
Мне любопытно, почему ваш метод расчета не может принимать, скажем, экземпляр класса финансовых полей и значение (т. Е. Значение свойства, которое вы хотите выполнить вычисление) в качестве параметров. Можете ли вы опубликовать некоторый код заглушки, чтобы осветить ваш вопрос? –
используют тот же тип в функции defination, который вы использовали в свойстве класса. –