Как бы я сделал этот динамический список в C # 4.0? - PullRequest
0 голосов
/ 27 августа 2011

Это может быть невозможно без сериализации объекта в байтовый массив, но я хочу иметь коллекцию объектов, единственными общими свойствами которых будут int и bool:

public class Speakers : IStereoComponents
{
     public int Id { get; set; }
     public bool RemoveMe { get; set; }
     public string SomethingElse { get; set; }
}

public class Receiver : IStereoComponents
{
    public int Id { get; set; }
    public bool RemoveMe { get; set; }
    public IList<string> Buttons { get; set; }
}

public interface IStereoComponents
{
     int Id { get; set; }
     bool RemoveMe { get; set; }
}

Я хочу добавить эти элементы в список или словарь и удалить или добавить их на основе идентификатора и поля RemoveMe. Я хочу быть в состоянии сделать что-то вроде:

foreach (компонент var в компонентах) component.RemoveMe == true;

Есть ли простой способ сделать это? Единственный способ сделать это - использовать отражение, сериализовав все в byte [], за исключением свойств Id и RemoveMe. Это будет тяжелая работа, я надеялся, что есть причудливый C # 4.0, делающий это? Или что-то совершенно очевидное, что мне не хватает?

1 Ответ

5 голосов
/ 27 августа 2011

Не нужно размышлять!Просто сделайте List<IStereoComponents>:

var components = new List<IStereoComponents>();
components.Add(new Speakers { Id = 1, RemoveMe = false, SomethingElse = "100W" });
components.Add(new Receiver { Id = 2, RemoveMe = false, Buttons = new List<string>() });

Затем вы можете просмотреть их, как вам угодно:

foreach (var component in components)
{
    if (listOfIdsToRemove.Contains(component.Id))
        component.RemoveMe = true;
}

Прелесть интерфейсов в том, что вас не волнует, что ещеобъект может делать: пока он делает то, что требует интерфейс, этого достаточно.

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