我使用泛型坚持的IEnumerable的IEnumerable的正确使用<T>
我有一个基类的
public class DirectoryObject //Microsoft.Azure.ActiveDirectory.GraphClient
{
...
}
那里有两个派生类
public class User : DirectoryObject
{
...
}
public class Group : DirectoryObject
{
...
}
我原本用了两个单独获取用户和组对象的方法...
public User GetUser(string objectId)
{
return _graphConnection.Get<User>(objectId);
}
public Group GetGroup(string objectId)
{
return _graphConnection.Get<Group>(objectId);
}
写了很多重复的用户和组的组合之后,我意识到,我可能只是一个通用的,像这样结合起来...
public T Get<T>(string objectId) where T : DirectoryObject
{
return _graphConnection.Get<T>(objectId);
}
但是我无法在这里将这一细分市场为通用的IEnumerable ...
public IEnumerable<User> ListUser()
{
PagedResults pagedResults = _graphConnection.List<User>(null, null);
return pagedResults.Results.OfType<User>();
}
public IEnumerable<Group> ListGroup()
{
PagedResults pagedResults = _graphConnection.List<Group>(null, null);
return pagedResults.Results.OfType<Group>();
}
我的线沿线的思考...
public IEnumerable<T> List() where T : DirectoryObject
{
PagedResults pagedResults = _graphConnection.List<T>(null, null);
return pagedResults.Results.OfType<T>();
}
但我无法得到它编译,我觉得我失去了一些明显的东西,但我现在正在绘制空白。该错误是发生在这里:
public IEnumerable<T> List() where T : DirectoryObject
+1那么,不是“那么好”,因为它是在它实际指定的方法名称之后。在其他地方,它只是用于(至少从方法的角度来看,从返回类型的角度来看,它自然是在返回类型中指定的)。 – Guffa
@ Selman22 - 谢谢。这消除了我的编译器错误! – Svek
@Guffa - 我刚刚注意到您对“GetUsers()”的用法作为方法名称所说的话。我只是想先让编译器出错,我甚至没有意识到命名不准确。也谢谢你! – Svek