带参数的命名参数

时间:2012-03-26 12:16:00

标签: c# function params

我有一种从数据库中获取值的方法。

 public virtual List<TEntity> GetValues(
           int? parameter1 = null,
           int? parameter2 = null,
           int? parameter3 = null,
           params Expression<Func<TEntity, object>>[] include)
        {
            //...
        } 

如何使用命名参数调用此函数,以便在include之前不写入所有参数? 我想做这样的事情

var userInfo1 = Unit.UserSrvc.GetValues(include: p => p.Membership, p => p.User);

但这似乎不起作用? 如何使用带参数的命名参数?

2 个答案:

答案 0 :(得分:12)

我认为唯一的方法是:

GetValues(include:
   new Expression<Func<TEntity, object>>[] { p => p.Membership, p => p.User })

哪个不是那么好。如果你为此添加了一个重载可能是最好的:

public List<Entity> GetValues(params Expression<Func<Entity, object>>[] include)
{
    return GetValues(null, null, null, include);
}

然后你就像

一样调用你的方法
GetValues(p => p.Membership, p => p.User)

答案 1 :(得分:8)

params参数的作用类似于数组,请尝试以下语法:

var userInfo1 = Unit.UserSrvc.GetValues(include: new Expression<Func<TEntity, object>>[] { p => p.Membership, p => p.User });

(由于通用参数可能需要一些调整,但我认为你得到了它的要点)