当Func <t,t =“”>是必需的类型时,如何传递其他参数?</t,>

时间:2014-01-27 22:41:24

标签: c# delegates

我在UserModel中有两个相关的静态方法:

public static UserModel GetUserByUsername(String username)
{
    //do something
    return UserModel;
}

和过载:

public static UserModel GetUserByUsername(String username, DateTime date)
{
    //do something else
    return DiffUserModel;
}

现在,我可以成功选择

List<UserModel>

运行

... .Select(UserModel.GetUserByUsername)
  .ToList();

这是调用重载的方法:

public static UserModel GetUserByUsername(String username)

问题:

如何调用重载方法并使用类似语法传入DateTime参数?

我希望能够做到这样的事情:

... .Select(UserModel.GetUserByUsername , DateTime.Now)
      .ToList();

获取从重载方法生成的List。

3 个答案:

答案 0 :(得分:5)

尝试使用lambda expression类型anonymous method

.Select(x => UserModel.GetUserByUsername(x, DateTime.Now))

答案 1 :(得分:1)

首先,您没有说一个方法是重载而一个方法没有。该方法名称被重载,两个方法都是重载。

至于问题:

.Select(new Func<UserModel, string>(s => UserModel.GetUserByName(s, DateTime.Now)))

答案 2 :(得分:0)

作为替代解决方案,因为您似乎喜欢方法组:

.Zip(Enumerable.Repeat(DateTime.Now, whatever.Count), UserModel.GetUserByName)

可能会做同样的事情。重复使用它有点尴尬,但它的确很简单。