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

本文关键字:动态 列表 创建 | 更新日期: 2023-09-27 18:06:54

如果不将对象序列化为字节数组,这可能是不可能的,但我希望有一个对象集合,其中唯一的公共属性将是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 in components)组件。RemoveMe == true;

是否有简单的方法来做到这一点?我能想到的唯一方法是使用反射,将所有内容序列化为字节[],除了Id和RemoveMe属性。这将是一件苦差事,我希望有一个奇特的c# 4.0来做这件事?还是我错过了一些很明显的东西?

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

不需要反思!只做一个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;
}

接口的美妙之处在于,你并不真正关心对象还能做什么:只要它做了接口所要求的,就足够了。