我有以下代码:
public interface ISomeObject
{
IList<ISomeObject> Objects { get; }
}
public class SomeObject : ISomeObject
{
public SomeObject()
{
Objects = new List<SomeObject>();
}
public List<SomeObject> Objects
{
get;
set;
}
IList<ISomeObject> ISomeObject.Objects
{
get
{
// What to do here?
// return Objects; // This doesn't work
return Objects.Cast<ISomeObject>().ToList(); // Works, but creates a copy each time.
}
}
SomeObject有一个Objects返回类类型列表的公共属性。知道该类类型的客户可以使用它来做任何他们想做的事情。仅知道有关的客户只能ISomeObject使用该Objects属性来获取IList<ISomeObject>. 因为不允许转换List<SomeObject>为IList<ISomeObject>(由于苹果和香蕉问题),所以我需要一种转换方法。默认方式,使用 Cast.ToList() 工作,但有一个缺点,它每次评估属性时都会创建一个新列表,这可能很昂贵。更改ISomeObject.Objects为返回 anIEnumerable<ISomeObject>的另一个缺点是客户端不能再使用索引(这在我的用例中非常相关)。并且当在 IEnumerable 上使用时,重复使用 Linq 的 ElementAt() 调用是很昂贵的。
有没有人知道如何避免这两个问题?(当然,SomeObject到处宣传不是一种选择)。
九州编程
ibeautiful
相关分类