Wie kann ich eine Eigenschaft einer Klasse als Parameter einer Methode übergeben?
Ich habe eine Klasse mit etwa einem Dutzend Eigenschaften, die verschiedene Finanzbereiche repräsentieren. Ich habe eine andere Klasse, die einige Berechnungen für jedes dieser Felder separat durchführen muss. Der Code in diesen Berechnungsmethoden ist identisch, mit Ausnahme des Felds, in dem die Berechnung ausgeführt wird.
Gibt es eine Möglichkeit, einen Eigenschaftsnamen als Parameter zu übergeben und nur eine Methode zu verwenden, die die gesamte durchzuführende Arbeit erledigt, anstatt der 12 Methoden für jede Eigenschaft?
Ich bin mir auch sicher, dass dies durch Reflektion erreicht werden kann, aber ich habe in einem anderen Code gesehen, wo Lambdas auf die gleiche Art und Weise verwendet werden, und mich gefragt, ob dies ein Kandidat ist, wo dies verwendet werden kann.
Wie gewünscht, hier ein Beispiel:
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
}
Mein Ziel ist es, nur eine Methode mit dem Namen GetTotalAmountByDate () zu erstellen und ein Start- und Enddatum sowie den Namen der Eigenschaft (ReleasedFederalAmount oder ReleasedLocalAmount usw.) einzugeben, auf die zugegriffen werden muss.
Ich hoffe, dies zeigt genau, was ich zu erreichen versuche.