FirstOrDefault vs IsNullOrDefault

时间:2014-07-22 19:15:43

标签: c# generics extension-methods

我可以转换或使用这个IsNullOrDefault有些像FirstOrDefault我的意思没有指定TSource吗?或者我应该如何修改方法使其类似于FirstOrDefault。

someList.FirstOrDefault()<<<简单干净

someValue.IsNullOrDefault<int>()&lt;&lt;&lt;我不想在这里说这是int

    public static bool IsNullOrDefault<T>(this T argument)
    {
        // deal with normal scenarios
        if (argument == null) return true;
        if (object.Equals(argument, default(T))) return true;

        // deal with non-null nullables
        Type methodType = typeof(T);
        if (Nullable.GetUnderlyingType(methodType) != null) return false;

        // deal with boxed value types
        Type argumentType = argument.GetType();
        if (argumentType.IsValueType && argumentType != methodType)
        {
            object obj = Activator.CreateInstance(argument.GetType());
            return obj.Equals(argument);
        }

        return false;
    }



public static TSource FirstOrDefault<TSource>(
    this IEnumerable<TSource> source
)

1 个答案:

答案 0 :(得分:0)

LINQ根据提供的值推断类型;如果你为方法提供一个int值,只要在泛型定义和参数中都使用了T,它就会推断出你的类型。