удаление элемента из коллекции на основе интерфейса не будет работать - PullRequest
1 голос
/ 08 мая 2019

(FYI, Foo и Bar - классы сущностей POCO Entity Framework)

Я хотел бы использовать этот интерфейс:

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 возвращает новый список, поэтому элемент удаляется из возвращенного списка, а не из исходной коллекции (столбцы).

Как я могу выйти из этой ситуации?Я действительно не хочу, чтобы IFoo знал о Баре и манипулировал только IBar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...