为什么这段代码中不能使用IList呢?

来源:百度知道 编辑:UC知道 时间:2024/05/26 06:16:35
Hashtable Items = new Hashtable();
public IList CartItems
{
get { return Items.Values; }
}
提示:无法将类型“System.Collections.ICollection”隐式转换为“System.Collections.IList”。存在一个显式转换(是否缺少强制转换?)
这是为什么呢?

首先看一下定义:
public class Hashtable : IDictionary, ISerializable, IDeserializationCallback, ICloneable
public interface IDictionary : ICollection
public interface IList : ICollection

IDictionary和IList继承自ICollection。所以IDictionary或IList转换成ICollection可以是隐式的。而反之不行。
在Hashtable的继承链上并不存在IList接口。你只能把CartItems标记成为ICollection或者IDictionary或者Hashtable返回类型。