C#,使方法更通用

时间:2017-04-03 14:02:51

标签: c# generics

请查看以下方法:

internal IEnumerable<Query> FilterOnUserInvolvement(IEnumerable<Query> input)
{
    var user = _userManager.GetUserByADName(_user.Identity.Name);
    if (_userManager.IsUserAdministrator(user) || _userManager.IsUserStaff(user))
    {
        return input;
    }
    else
    {
        using (var context = new QAContext())
        {
            var involvedQueries = context.UserInvolvement.Where(x => x.UserID == user.ID).Select(x => x.QueryID).ToList();
            return input.Where(i => involvedQueries.Contains(i.ID));
        }
    }
}

现在这个方法需要IEnumerable<Query>并返回相同的内容。

实际上,此方法的功能可以应用于任何包含ID的IEnumerable<Type>

如何使用泛型重写此查询,以便可以使用另一个包含ID的Type调用它?

1 个答案:

答案 0 :(得分:6)

只需将T限制为包含ID的类型:

internal IEnumerable<T> FilterOnUserInvolvement<T>(IEnumerable<T> input) where T : ISomeInterfaceWithId
{

}