我有一个类需要 IList<T>
,但我却拥有一个来自NHibernate查询的 Systems.Collection.IList
。
我想创建一个方法将其转换为 IList<T>
。我该怎么做?
我有一个类需要 IList<T>
,但我却拥有一个来自NHibernate查询的 Systems.Collection.IList
。
我想创建一个方法将其转换为 IList<T>
。我该怎么做?
IList<T> myList = nonGenericList.Cast<T>().ToList();
如果您不确定:
IList<T> myList = nonGenericList.OfType<T>().ToList();
using System.Linq;
Cast
和OfType
返回的是实现IEnumerable<T>
接口的类型,而不是IList<T>
类型,因此它们对你没有用处。.Cast<T>().ToList
会导致列表的额外复制,可能会对性能产生负面影响。class ListWrapper<T> : IList<T>
{
private IList m_wrapped;
//implement all the IList<T> methods ontop of m_wrapped, doing casts
//or throwing not supported exceptions where appropriate.
//You can implement 'GetEnumerator()' using iterators. See the docs for
//yield return for details
}
IList multiResults = session.CreateMultiCriteria()
.Add(pageCriteria)
.Add(countCriteria)
.List();
IList<T> results = ((IList)multiResults[0]).Cast<T>().ToList();
IList counts = (IList)multiResults[1];
list.OfType<T>()
或.Cast<T>()
。Frederik 是正确的,NHibernate 已经实现了这个功能。
var data = query.List<MyType>();
IList<MyType>
。你不能让NHibernate返回一个IList吗?
ICriteria接口定义了一个List<T>
方法...
在这种情况下不需要使用Linq(OfType()或.Cast)。 NHibernate实现就足够了。
你只需要使用:
var results= query.List<YourType>();
不是
var results= query.List<>();