2016-07-19 5 views
-5

Ich habe eine Funktion, die einen String-Wert zurückgibt. Wie unten zu sehen ist, füllt es eine Liste und findet dann den längsten Wert in dieser Liste und gibt es zurück.Rückgabewert der C# -Funktion innerhalb einer if-Anweisung

public static string myFunction(string str) 
{ 
    for (blah str) 
    {      
     myList.Add(someString); 
    } 

    string longest = myList[0]; 

    foreach (string s in myList) 
    { 
     if (s.Length > longest.Length) 
     { 
      longest = s; 
     } 
    } 

    return longest; 
} 

Ich bemerkte, dass, wenn meine Liste nicht gefüllt ist bekam, habe ich eine Fehlermeldung erhalten, wenn die Liste leer ist zu prüfen, um eine Bedingung hinzuzufügen, so entschieden. Aber das Hinzufügen der if-Anweisung, um dies zu überprüfen, führt dazu, dass der Rückgabewert außerhalb des Gültigkeitsbereichs liegt.

Wie kann ich dies beheben, ohne eine andere Variable zu deklarieren?

Ich frage mich auch, wie man S-String zurückgibt, wenn Sie die erforderliche Zeichenfolge und -1 gefunden, wenn Sie es nicht gefunden haben? Ich weiß, dass der Rückgabetyp einer Funktion nur eine Sache sein kann, aber wenn meine Funktion -1 zurückgeben muss, wenn sie die erforderliche Zeichenfolge nicht findet, wie mache ich das?

EDIT: gelöst, zum einen durch die folgende Zugabe als ich die Liste bin erklärt (und nicht in der if Aussage mit myList[0] erklärt, die mein großer Fehler war):

List<string> myList = new List<string>() {""}; 

Zweitens für verschiedene Rückgabetypen (was einfach Programmieranforderung ist) Ich erkläre einen Rückgabetyp, um die string oder -1 für Rückgabewert zu erreichen.

ein anderes EDIT: Die mitgelieferte Antwort auf diese Frage ist auch korrekt (die ich so markiert habe), obwohl es ein anderes Paradigma verwendet, das derzeit nicht mein Fokus ist.

+1

Verschieben Sie die Deklaration ('string longest ....;') bis kurz vor Ihr 'if'. Initialisiere auf null oder leer anstelle von 'myList [0]'. –

+2

Was möchten Sie zurückgeben, wenn die Liste leer ist? – Lee

+0

@Lee: Ich sollte die längste Zeichenfolge zurückgeben, wenn sie existiert, oder wenn leer, sollte ich '-1' zurückgeben, aber keine Ahnung, wie das geht. Also dachte ich zuerst, dass ich mich mit dem Ziel befassen werde, und dann werde ich mich um diesen Teil kümmern. Irgendwelche Ideen, wie man das macht? – Joshua

Antwort

1

können Sie diese Onliner nutzen:

string longestString = strsList.FirstOrDefault(st => st.Length == strsList.Select(s => s.Length).Max()) ?? string.Empty; 

Es wird die längste Zeichenfolge oder eine leere Zeichenfolge, wenn die Liste leer zurück.

Wenn Sie längste Länge suchen, in Betracht ziehen:

return strsList.Select(s => s.Length).Concat(new[] {-1}).Max(); 

Welche -1 zurück, wenn der String leer ist oder die längste Länge.

+3

First() wird eine Ausnahme auslösen, wenn die Liste leer ist. Verwenden Sie stattdessen FirstOrDefault. –

+0

@ M.Hassan Sie haben völlig Recht, danke für die Ankündigung! –

Verwandte Themen