C# 从基于接口的集合中删除项将不起作用

C# 从基于接口的集合中删除项将不起作用,c#,.net,collections,interface,C#,.net,Collections,Interface,(仅供参考,Foo和Bar是实体框架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 {

(仅供参考,Foo和Bar是实体框架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();
            }
        }
}
这不会删除该元素!我明白为什么。原因是我的接口集合getter,再次如下所示:

public ICollection<IBar> IBars
        {
            get
            {
                return Bars.Cast<IBar>().ToList();
                //or return new List<ICardInquiry>(CardsInquiries);
            }
          ...
         }
公共ICollection IBars
{
得到
{
返回杆.Cast().ToList();
//或返回新列表(卡片需求);
}
...
}
IBars返回一个新列表,因此元素将从返回的列表中删除,而不是从原始集合(条形图)中删除


我怎样才能摆脱这种局面?我真的不想让IFoo知道Bar,只想计算IBar。

如果(值是ICollection)
那是一个无用的检查。它已经由属性类型强制执行。当您调用
.ToList()
时,您正在创建一个填充相同元素的新集合。我假设
Bar
实现接口
IBar
?因为您不显示
栏的源代码
。这不是一个完整且可验证的示例。是的,Bar确实实现了接口IBarI。请在此询问您的目标
ICollection
允许添加元素,您是否允许调用方添加实现IBar的任何内容?如果是这样的话,为什么不把IBar作为内部集合呢?您是否处理与实现IBar的其他对象不同的Bar对象?
如果(值为ICollection)
这是一个无用的检查。它已经由属性类型强制执行。当您调用
.ToList()
时,您正在创建一个填充相同元素的新集合。我假设
Bar
实现接口
IBar
?因为您不显示
栏的源代码
。这不是一个完整且可验证的示例。是的,Bar确实实现了接口IBarI。请在此询问您的目标
ICollection
允许添加元素,您是否允许调用方添加实现IBar的任何内容?如果是这样的话,为什么不把IBar作为内部集合呢?您对待Bar对象是否与实现IBar的其他对象不同?
public ICollection<IBar> IBars
        {
            get
            {
                return Bars.Cast<IBar>().ToList();
                //or return new List<ICardInquiry>(CardsInquiries);
            }
          ...
         }