相关疑难解决方法(0)

Int和Int的FirstOrDefault行为?

我刚读了一篇SO 帖子,说明FirstOrDefault()返回类型会根据所选元素的值而有所不同.

例:

ICollection<String> list = new List<String>();
list.Add("bye");

int a = (from x in list where (x == "hi") select x.Length).FirstOrDefault(); 
Run Code Online (Sandbox Code Playgroud)

在此示例中,a由于int默认值为0 ,因此将等于0.

但是,我可以.Cast<int?>()根据已经链接的帖子追加,以便null在查询返回0结果时获取.

int? a = (from x in list where ... x.Length).Cast<int?>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

为什么我没有得到编译时错误(或至少是一个警告),对于我的第一个例子,我使用Nullable int(int?)而不是常规int

如果我理解正确,使用int?when执行我的第一个查询将永远不会导致值null.

c# linq

17
推荐指数
1
解决办法
2万
查看次数

对FirstOrDefault的不同看法

IEnumerable扩展方法FirstOrDefault没有按照我的意愿完成,所以我创建了FirstOrValue.这是一个很好的方式去做或有更好的方法吗?

public static T FirstOrValue<T>(this IEnumerable<T> source, Func<T, bool> predicate, T value)
{
    T first = source.FirstOrDefault(predicate);
    return Equals(first, default(T)) ? value : first;
}
Run Code Online (Sandbox Code Playgroud)

c# extension-methods

10
推荐指数
2
解决办法
3330
查看次数

FirstOrDefault 在整数列表上不返回 null

当我FirstOrDefault()在整数或布尔值的空列表上使用时,我得到0orfalse而不是null

我知道这是设计使然,因为它会返回default(T),但我如何强制它返回呢null

var emptyList = new List<int>();

emptyList.FirstOrDefault() == 0; // I want to receive null instead
Run Code Online (Sandbox Code Playgroud)

c# linq

1
推荐指数
1
解决办法
2501
查看次数

标签 统计

c# ×3

linq ×2

extension-methods ×1