我如何在C#4.0中创建这个动态列表?

时间:2011-08-27 17:30:44

标签: c# c#-4.0

如果没有将对象序列化为字节数组,这可能是不可能的,但我希望有一组对象,其中唯一的常见属性是intbool

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; }
}

我想要做的是能够将这些项添加到列表或字典中,并根据Id和RemoveMe字段删除或添加它们。我希望能够做到这样的事情:

  

foreach(组件中的var组件)component.RemoveMe == true;

有一种简单的方法吗?我能想到的唯一方法是使用反射,将所有内容序列化为byte [],Id和RemoveMe属性除外。这将是一件苦差事,我希望有一个奇特的C#4.0这样做?还是一些我完全不知道的东西?

1 个答案:

答案 0 :(得分:5)

无需反思!只需制作一个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;
}

界面的美妙之处在于你并不关心对象能做什么:只要它完成了界面所需要的,这就足够了。