C#中的介面和泛型集合探討

weixin_30639719發表於2020-04-05

今天在寫一個許可權管理API的實現類,碰到了一個很有意思的問題。

具體情況是這樣的:

 

許可權管理API有一個需要實現的抽象方法:

public IList<IPermission> GetPermissions();

 

需要注意的是IList<IPermission>這個泛型集合的型別引數IPermission是個介面。

 

現在我要在實現類中使用NHibernate去實現這個方法,一開始我覺得很簡單。

因為有一個實體類Permission實現了IPermission介面,於是很直接的寫法:

return NHibernateSession.CreateCriteria(typeof(Permission)).List<Permission>();

 

編譯這段程式碼,大家會發現中招了:

 

錯誤    137    無法將型別“System.Collections.Generic.IList<Permission>”隱式轉換為“System.Collections.Generic.IList<IPermission>”。存在一個顯式轉換(是否缺少強制轉換?)   

 

既然說缺少強制轉換,OK。我就將它強制轉換一下。

 

return NHibernateSession.CreateCriteria(typeof(Permission)).List<Permission>() as IList<IPermission>;

 

這回編譯通過,狂喜中...

 

於是除錯,不幸的是,返回結果是null。當場暈倒。

 

想來想去,只好採用笨方法:

IList<Permission> permissions = NHibernateSession.CreateCriteria(typeof(Permission)).List<Permission>();

IList<IPermission> ipermissions = new IList<IPermission>();

foreach ( Permission permission in permissions )

ipermissions.Add(permission);

return ipermissions;

 

這樣寫可以,只是非常鬱悶。

 

大家有什麼更好的方法嗎?

轉載於:https://www.cnblogs.com/didasoft/archive/2007/08/27/871097.html

相關文章