我有一個看起來像這樣的方法:如何判斷泛型類型是否支持某個接口併爲該接口轉換爲某個函數?
private IEnumerable<T> QueryCollection<T>() where T : BaseObj
{
IEnumerable<T> items = query<T>();
return items;
}
我現在有我想要的篩選此項目集合的情況如果「T」支持某個接口(也可能不會,所以我不能簡單地將它作爲T的約束添加)。所以,我想是這樣的:
private IEnumerable<T> QueryCollection<T>() where T : BaseObj
{
IEnumerable<T> items = query<T>();
if (typeOf(T).GetInterface(ITeamFilterable) != null)
{
items = FilterByTeams(items);
}
return items;
}
什麼是檢查推薦的方式,如果我的泛型類型支持某個接口**,然後,如果是,那麼
- 使用該方法中篩選集合
- 但仍返回集合在「T」型的總體方法
注: FilterByTea MS發生在一個:
IEnumerable<ITeamFilterable>
,並返回
IEnumerable<ITeamFilterable>
我需要投收集2次(一次轉換爲界面的列表,然後再轉換回的T名單? )
或者只是使用'is' /'as' +'!= null'。 http://stackoverflow.com/questions/410227/test-if-object-implements-interface – 2014-09-28 12:17:38
這是**不是重複**因爲鏈接的問題不處理協變 – 2014-09-29 14:37:43