我用一个返回
的代码调用我的仓库IEnumerable<MyEntity>
当我尝试实现结果时,只有当我对结果执行.ToList()时才会有效,但如果我尝试
as IList<MyEntity>
它给出了null。它们不应该产生相同的结果吗?
答案 0 :(得分:4)
然后,您的枚举不是实现import sys
的类型,如IList<T>
或类似。如果实例属于该类型,List<T>
只是将变量强制转换为指定的类型。它没有进行任何转换。
as
实际上强制创建新的ToList()
,因此在那里创建的新实例确实实现了List<T>
。
答案 1 :(得分:3)
.ToList()
将您的IEnumerable
转换为List
as IList
(&#34;尝试&#34;)将您的IEnumerable
投放到IList
。
您的IEnumerable
可能根本不是IList
,一个简单的例子可能是class Dictionary
:
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>,
IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>,
IReadOnlyCollection<KeyValuePair<TKey, TValue>>, ISerializable,
IDeserializationCallback
我们可以看到上述接口都不是IList
修改:感谢@patrick-hofman评论,check整个实施链非常重要,以确保此类不是{{1} (在这种情况下当然可以)。
那就是说,正如我们从IList
签名中看到的那样:
IList
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
是IList
,但IEnumerable
不是IEnumerable
。