我使用泛型堅持的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