使用param关键字的泛型委托参数检查null

时间:2014-07-10 07:21:37

标签: c# lambda delegates func

我在这里有一个有趣的案例。我有一个方法调用

bool pass= Check.CheckNotNull<RemoveRoleFromUserCommand>(x => x.RoleName, x => x.UserId);

现在我想把这个方法定义为这样......

public static void CheckNotNull<T>(params Expression<Func<T, object>>[] @params)
    {
        return @params.All(x=> ..... );
    }

如何检查@params委托中我已通过的所有值的所有值。

1 个答案:

答案 0 :(得分:3)

好吧,如果要调用委托,则需要T的实例。所以添加它作为参数。

public static bool CheckNotNull<T>(T item, params Func<T, object>[] @params)
{
    return @params.All(selector => selector(item) != null );
}

回应评论:

public static bool CheckNotNull<T>(T item, params Func<T, object>[] @params)
{
    return @params.All(selector =>
        {
            var selected = selector(item);
            return selected is string? string.IsNullOrEmpty(selected as string) : selected != null;
        } );
}