在这种情况下我可以使用C#List吗?

时间:2016-01-19 10:25:15

标签: c# list unique

我有一系列相似类型的操作,我需要为其创建不同的类ActionClass1ActionClass2。 此外,我有不同的网站,我需要在其中执行不同的操作列表。请注意,此列表的内容取决于网站。

我想开发一个GUI,以便能够使用c#和WPF编辑在给定网站SiteClass上执行的操作。

我现在的想法是做以下事情:

  1. 从一个共同的抽象动作类ActionClass1对不同的动作类AbstractActionClass等进行子类化。
  2. 创建ActionList的{​​{1}}列表,其中包含不同的操作作为具体实现(例如AbstractActionClass等)。
  3. 创建ActionClass1SiteList个实例的列表,其中包含具有相应操作列表和其他信息(例如网站位置等)的网站。
  4. 到目前为止,我对上述内容有很好的了解。但是,我现在需要为每个站点编辑SiteClass并在GUI中对其进行样式设置,以便具有相同ActionList的所有站点看起来都相同(例如,具有相同的颜色)。因此,我需要能够比较ActionList中每个ActionList实例的SiteClass来检查它们是否不同,找出有多少不同的实例,然后相应地设置它们的样式在GUI中。

    所以我的问题是:我是否可以在SiteList中使用ActionList List<AbstractActionClass>类型的列表来执行比较,例如&#39; Unique&#39;等,以找出SiteClassActionList List<AbstractActionClass>的唯一出现次数,并将此信息用于样式?还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

简答:是的

详细答案。您可以创建List<AbstractionClass>并处理不同的渲染,您可以采取两种方法:

  1. 向类中添加一个抽象属性,告诉您该类是什么:

    public abstract string ClassType { get; }
    
  2. 并在每个不同的动作列表中实现它作为一个简单的

    public override string ClassType { get { return "ActionClass1";}}
    

    然后在渲染代码中执行

    switch (ac.ClassType)
    { 
        case "ActionClass1":
            /// render according to class 1;
            break;
        case "ActionClass2":
            /// render according to class 2;
            break;
      }
    
    1. 你可以做一些简单的演员:

      if (ac is ActionClass1)
      {
          /// render according to class 1
      }
      else if (ac is ActionClass2)
      {
         ///  render according to class 2
      }
      
    2. 您可以抽象List本身:

      public class ActionClassList : List<ActionClass>
      {
          public abstract string ClassType { get;}
      }
      
    3. 并实现ActionClassList1和ActionClassList2以返回不同的ClassTypes。

      在接收端,你总是接受一个ActionClassList,但它可能是你得到的派生类之一。

答案 1 :(得分:1)

是。这可以在C#中以多种方式完成,但C#列表对此并不是一个坏主意,因为您熟悉并且可以更好地理解这个想法,所以我说使用C#列表没有错。