c# – 对FirstOrDefault的不同选择

前端之家收集整理的这篇文章主要介绍了c# – 对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;
}

解决方法

你的代码可能不正确你可能没有考虑所有的情况.

当然,我们不知道任何代码是否正确或不正确,直到我们有规范.所以首先写一条一行规格:

“FirstOrValue< T>采用T的序列,谓词和T的值,并返回与谓词匹配的序列中的第一项,如果有的话,或者如果没有,则返回所述值.

您的尝试是否实际实施该规范?当然不是!测试:

int x = FirstOrValue<int>( new[] { -2,1 },y=>y*y==y,-1);

这返回-1.根据规范的正确答案为0.与谓词匹配的第一项为零,因此应返回.

规范的正确实现将如下所示:

public static T FirstOrValue<T>(this IEnumerable<T> sequence,T value)
{
    if (sequence == null) throw new ArgumentNullException("sequence");
    if (predicate == null) throw new ArgumentNullException("predicate");
    foreach(T item in sequence)
        if (predicate(item)) return item;
    return value;
}

总是先写一个规范,即使它只是一个句子.

原文链接:https://www.f2er.com/csharp/93059.html

猜你在找的C#相关文章