从基于接口的集合中删除某项将无法正常工作

时间:2019-05-08 07:07:35

标签: c# .net collections interface

(FYI,Foo和Bar是Entity Framework POCO实体类)

我想使用此界面:

public interface IFoo
{
 int Id { get; set; }
 string Name { get; set; }
 ICollection<IBar> IBars{ get; set; } //association with another entity
}

My implementation is as follows:

public class Foo : IFoo
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Bar> Bars{ get; set; }

//Interface implementation
 public ICollection<IBar> IBars
        {
            get
            {
                return Bars.Cast<IBar>().ToList();
                //or return new List<ICardInquiry>(CardsInquiries);
            }

            set
            {
                if (value is ICollection<IBar>)
                    Bars= ((ICollection<IBar>)value).Cast<Bar>().ToList();
                else
                    throw new NotImplementedException();
            }
        }
}

此实现阻止我从集合中删除元素:

IFoo iFoo = MyIFooFactory.CreateIFoo();
IBar iBar = iFooIBars.First();
iFoo.IBars.Remove(iBar);

这不会删除元素!我知道为什么。原因是我的接口集合获取器,再次如下:

public ICollection<IBar> IBars
        {
            get
            {
                return Bars.Cast<IBar>().ToList();
                //or return new List<ICardInquiry>(CardsInquiries);
            }
          ...
         }

IBars返回一个新列表,因此该元素将从返回列表中移除,而不是从原始集合(Bars)中移除。

如何摆脱这种情况?我真的不希望IFoo知道Bar并且只操纵IBar。

0 个答案:

没有答案