今天在寫一個許可權管理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;
這樣寫可以,只是非常鬱悶。
大家有什麼更好的方法嗎?