具有多个类型的一个参数的C#泛型方法

cyb*_*cat 3 c# generics

我有一个问题,写一个通用的方法,以获取广告组或用户,可以是两种类型之一的参数-无论是System.DirectoryServices.AccountManagement GroupPrincipalUserPrincipal

方法如下: -

private static IEnumerable<string> GetGroupsOrUsers<T>(T GroupOrUserPrincipal)
{
   PrincipalSearcher ps = new PrincipalSearcher();
   ps.QueryFilter = GroupOrUserPrincipal;

   etc.........
}
Run Code Online (Sandbox Code Playgroud)

问题是GroupOrUserPrincipal显示以下错误: -

无法将类型'T'隐式转换为System.DirectoryServices.AccountManagement.Principal

我能做到这一点还是我错过了什么?

Jen*_*ens 7

您应该限制T您的方法有意义的类型:

private static IENumerable<string> GetGroupsOrUsers<T>(T GroupOrUserPrincipal)
        where T : Principal
{
      // .....
Run Code Online (Sandbox Code Playgroud)

这可以防止调用GetGroupsOrUsers<int>,并且可以T隐式转换为Principal修复错误(或者我希望如此).