C#,使方法更通用

Ton*_*olf 0 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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这个方法获取IEnumerable<Query>并返回相同的内容.

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

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

mac*_*ura 6

只需将您限制T为包含ID以下内容的类型:

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

}
Run Code Online (Sandbox Code Playgroud)