当FirstOrDefault在排序列表中找不到任何内容时,我怎么理解?

时间:2016-08-03 12:40:13

标签: c#

我有SortedList<DateTime, object>。每次都是KeyValuePair<>,这是一个结构。那么,我怎么能理解方法FirstOrDefault何时在此列表中找不到任何内容?(对于类返回null但是对于struct?)

为什么我无法比较default(KeyValuePair<Key, Value>)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);

我希望条件像&#34;如果没有找到&#34;

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

1 个答案:

答案 0 :(得分:2)

将项目转换为KeyValuePair<DateTime,object>?,然后您就可以检查它是否等于null。

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

在您的示例代码中:

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

现在你可以lastGwPassages == null