(Aus Gründen der Bequemlichkeit, diese Antwort übernimmt myList
implementiert IEnumerable<string>
;. string
mit dem entsprechenden Typ gegebenenfalls ersetzen)
Wenn Sie .NET 3.5, verwenden Sie die First()
Erweiterung mit Methode:
string first = myList.First();
Wenn Sie nicht sicher sind, ob irgendwelche Werte sind oder nicht, können Sie die FirstOrDefault()
Methode verwenden, die zurückkehren null
(oder allgemeiner der Standardwert des Elementtyps) für eine leere Sequenz.
Sie es immer noch tun können, „der lange Weg“ ohne foreach
Schleife:
using (IEnumerator<string> iterator = myList.GetEnumerator())
{
if (!iterator.MoveNext())
{
throw new WhateverException("Empty list!");
}
string first = iterator.Current;
}
Es ist ziemlich obwohl hässlich :)
In Antwort auf Ihren Kommentar, nein, ist die zurückgegebene Iterator nicht zuerst am ersten Element positioniert; Es ist vor das erste Element positioniert. Sie müssen MoveNext()
aufrufen, um es zum ersten Element zu verschieben, und so können Sie den Unterschied zwischen einer leeren Sequenz und einer mit einem einzelnen Element feststellen.
EDIT: Ich denke nur darüber nach, ob das ein ist nützliche Erweiterungsmethode:
public static bool TryFirst(this IEnumerable<T> source, out T value)
{
using (IEnumerator<T> iterator = source.GetEnumerator())
{
if (!iterator.MoveNext())
{
value = default(T);
return false;
}
value = iterator.Current;
return true;
}
}
Ist mylist.GetEnumerator() Strom gleich dieser.? Ich möchte es nur wissen, um es zu wissen. –
Ich bin mir nicht sicher, ob ich die Extension-Methode mag, da ihr Out-Parameter es weniger zusammensetzbar macht. Ich weiß, das ist der Sinn der Methode in diesem Fall, aber etwas, das in einer Sequenz nicht zusammensetzbar ist, scheint falsch zu sein. –
Das Ergebnis davon ist jedoch keine Sequenz - es wird immer nur ein einzelnes Element und ein Boolescher Wert sein, also müsste es sowieso am Ende der Kompositionskette sein. Ich denke, wenn man sich die Orte ansieht, wo man das wirklich möchte, ist das kein Problem. Wie Sie sagen, ist es der Punkt der Methode. –