2016-08-03 3 views
1

Ich habe SortedList<DateTime, object>. Jedes Mal ist es eine KeyValuePair<>, die eine Struktur ist. Also, wie kann ich verstehen, wenn Methode FirstOrDefault nichts in dieser Liste gefunden? (Für Klassen gibt es null aber für ein struct?)Wie kann ich verstehen, wenn FirstOrDefault in der sortierten Liste nichts gefunden hat?

Warum ich kippe gerade vergleichen default(KeyValuePair<Key, Value>) und Ergebnis FirstOrDefault?

private SortedList<DateTime, GatewayPassage> gwPassages = 
    new SortedList<DateTime, GatewayPassage>(new DescDateTimeComparer()); 

var lastGwPassages = gwPassages.FirstOrDefault(x => x.Value.Tag == tag && 
                x.Value.Gateway == gateway); 

Ich mag Bedingung wie „wenn nichts gefunden“

if(lastGwPassages == %some kind of default value%) 
+0

Warum wollen Sie FirstOfDefault verwenden möchten, wenn Sie Ergebnis der Suche steuern möchten? – ams4fy

+1

Ich denke, Sie sollten vergleichen mit 'default (KeyValuePair )' statt – Petaflop

+0

Sie könnten vergleichen, wenn die '.Key == default (DateTime)' –

Antwort

1

Guss der Gegenstände in ein KeyValuePair<DateTime,object>? und dann werden Sie in der Lage sein zu überprüfen, ob es gleich null ist.

SortedList<DateTime, object> collection = new SortedList<DateTime, object>() 
{ 
    { new DateTime(2016,1,2), new object() }, 
    { new DateTime(2016,1,1), new object() }, 
    { new DateTime(2016,1,3), new object() }, 
}; 

var firstOrDefault = collection.Cast<KeyValuePair<DateTime,object>?>().FirstOrDefault(); // date of 1/1/2016 
var checkIfDefault = firstOrDefault == null; // false 

collection.Clear(); 

firstOrDefault = collection.Cast<KeyValuePair<DateTime, object>?>().FirstOrDefault(); // null 
checkIfDefault = firstOrDefault == null; // true 

In Ihrem Beispiel-Code:

var lastGwPassages = gwPassages.Cast<KeyValuePair<DateTime,GatewayPassage>?>() 
           .FirstOrDefault(x => x.Value.Tag == tag && 
                x.Value.Gateway == gateway); 

Jetzt können Sie lastGwPassages == null tun

Verwandte Themen