2008-12-05 2 views
5

Überprüfen Sie diesen Test aus:Rückführung von leeren Sammlungen

[TestFixture] 
public class Quick_test 
{ 
    [Test] 
    public void Test() 
    { 
     Assert.AreEqual(0, GetByYield().Count()); 
     Assert.AreEqual(0, GetByEnumerable().Count()); 
    } 

    private IEnumerable<string> GetByYield() 
    { 
     yield break; 
    } 

    private IEnumerable<string> GetByEnumerable() 
    { 
     return Enumerable.Empty<string>(); 
    } 
} 

Wenn ich Stub Methoden schreiben im Allgemeinen verwende ich die Enumerable.Empty Art und Weise tun. Ich bin über einen alten Code gestolpert, den ich geschrieben habe.

Das hat mich zu fragen:

  • , die für andere Entwickler optisch ansprechender ist?
  • Gibt es versteckte Fallstricke, die dazu führen würden, dass wir einander bevorzugen?

Vielen Dank!

+0

Nicht direkt auf die Frage bezogen; Aber da Sie MbUnit zu verwenden scheinen, gibt es eine dedizierte Assertion für die Überprüfung von leeren Enumerationen: Assert.IsEmpty (GetByYield()). Es ist wahrscheinlich besser lesbar als die klassische Gleichheitserklärung gegen die Anzahl der Items. –

Antwort

6

Ich würde jede Methode bevorzugen, die Bedeutung der klarsten in den Entwickler liefert. Ich persönlich weiß nicht, was die Ausbeute brechen; Zeile ist do, also würde 'Enumerable.Empty(); `in jeder meiner Codebasen bevorzugt werden.

+2

Ich weiß, was Ausbeute Bruch tut, aber ich denke immer noch Enumerable.Empty() ist eine viel klarere Ausdruck der Absicht. –

1

Noch schneller könnte sein:

T[] e = {}; 
return e; 
+0

Das stößt uns von Einzellern zu zwei. Vielleicht wäre das eine weitere Alternative in diesem Gedanken? return new string [0]; – Rob

4

Enumerable.Empty: Die Dokumentation behauptet, dass es eine leere Sequenz "zwischenspeichert". Reflektor bestätigt. Wenn Caching-Verhalten für Sie wichtig ist, gibt es einen Vorteil für Enumerable.Empty