2017-02-22 1 views
0

Ich habe eine Methode (AlphaCalcResult), die mehrere Werte zurückgeben sollte. Jedes Forloop hat eine Logik, die einem Listenfeld einen Wert zuweist. Ich möchte dann das Ergebnisobjekt mit den zwei Werten zurückgeben, die aus zwei Loops erzeugt wurden, die unten beschrieben sind. Neu in C# Entwicklung und Probleme mit der Syntax.C# gibt mehrere Werte in einem Objekt zurück

Wie kann ich Return-Anweisung in meinem Code unten tun?

public AlphaCalcResult CalculateAlpha(AlphaCalcParam param) 
{ 
    AlphaCalcResult result = new AlphaCalcResult 
    { 
     portfolios = new List<Portfolio>() 
    }; 

    // Lists Portfolios & Settings 
    var portfolioListItem = param.portfolios.portfolioHoldings; 
    var scoreListItem = param.settings.grossAlphas; 

    // 1. CALCULATE FUND ALPHA 
    for (var i = 0; i<portfolioListItem.Count; i++) 
    { 
     portfolioListItem[i].fundRating = i; 

     for (var j = 0; j<scoreListItem.Count; j++) 
     { 
      scoreListItem[j].fundRating = j; 

      if(i == j) 
      { 
       portfolioListItem[i].fundAlpha = scoreListItem[j].grossAlpha - portfolioListItem[i].fundExpenseRatio; 
      } 
     } 
    } 

    //2. CALCULATE PORTFOLIO ALPHA 
    var portfolioAlphaResult = param.portfolios.portfolioAlpha; 
    for (var i =0; i<portfolioListItem.Count; i++) 
    { 
     portfolioAlphaResult = portfolioListItem[i].fundWeight * portfolioListItem[i].fundAlpha; 
    }; 

    // populate result 
    return result; 
    } 
+3

Sie sind nie tatsächlich Ergebnis zu füllen, Sie erstellen eine leere Liste, eine Menge Arbeit, die nie zu dieser Liste hinzufügt, und die leere Liste – bizzehdee

+0

können Sie mich bitte in die richtige Richtung bitte? –

+2

Ich dachte, ich tat .... Sie berechnen 'portfolioAlphaResult', fügen es aber nie zu' result.portfolios' hinzu. – bizzehdee

Antwort

1

erste Änderung public IEnumerable<Portfolio> portfolios { get; set; } zu

public List<Portfolio> portfolios { get; set; } 

weil IEnumerable zum Lesen der Liste verwendet wird und in Ihrem Code hinzufügen

+0

Ist das eine andere für eine Schleife oder eine bestehende? –

+1

aktualisierte meine Antwort – Usman

1

Ich bin mir nicht sicher, ob dies wirklich das, was Sie in diesem Fall tun würde, aber Sie können mehrere Werte zurückgeben .NET 4.0 + 's Tuple-Typ.

Beispiel:

public Tuple<string, int> GetValues() 
{ 
    return Tuple.Create("first",2); 
} 

// usage: 
var result = GetValues(); 
var theString = result.Item1; 
var theInt = result.Item2; 
1

Ändern Sie diesen Teil:

//2. CALCULATE PORTFOLIO ALPHA 
var portfolioAlphaResult = param.portfolios.portfolioAlpha; 
for (var i =0; i<portfolioListItem.Count; i++) 
{ 
    portfolioAlphaResult = portfolioListItem[i].fundWeight * portfolioListItem[i].fundAlpha; 
    (result.portfolios as List<Portfolio>).Add(new Portfolio() { portfolioAlpha = portfolioAlphaResult }); 

}; 
+0

Versucht, aber einen Fehler erhalten IEnumerable enthält keine Definition für Add und keine Erweiterungsmethode Add akzeptiert ein erstes Argument. –

+1

Sorry, siehe meine aktualisierte Antwort –

Verwandte Themen