2011-08-27 61 views
0

沒有序列化對象的字節數組,這可能是不可能的,但我希望有對象的集合,唯一的公共屬性將是一個intbool我將如何在C#4.0中創建這個動態列表?

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做到這一點?或者我錯過了一些完全明顯的東西?

回答

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

接口的好處是,你真的不關心還有什麼對象可以這樣做:爲只要它符合界面要求,就足夠了。

+0

同時在接口中將公共修飾符關閉RemoveMe並將==更改爲=在foreach中。 – TrueWill

+0

只是FYI如果List類不支持您的需要System.Collections.Generic命名空間有一大堆類型集合,可能會提供您需要的額外方法。 – Phil