How can I make sure that FirstOrDefault has returned a value

后端 未结 3 1201
没有蜡笔的小新
没有蜡笔的小新 2020-12-24 04:14

Here\'s a simplified version of what I\'m trying to do:

var days = new Dictionary();
days.Add(1, \"Monday\");
days.Add(2, \"Tuesday\");
..         


        
3条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-24 05:02

    FirstOrDefault doesn't return null, it returns default(T).
    You should check for:

    var defaultDay = default(KeyValuePair);
    bool b = day.Equals(defaultDay);
    

    From MSDN - Enumerable.FirstOrDefault:

    default(TSource) if source is empty; otherwise, the first element in source.

    Notes:

    • If your code is generic it is better to use EqualityComparer.Default.Equals(day, defaultDay), becuase .Equals may be overridden or day could be a null.
    • In C# 7.1 you will be able to use KeyValuePair defaultDay = default;, see Target-typed "default" literal.
    • See also: Reference Source - FirstOrDefault

提交回复
热议问题