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

在这种情况下,我可以使用C#List吗?,c#,list,unique,C#,List,Unique,我有一个类似类型的操作列表,需要为其创建不同的类ActionClass1,ActionClass2。 此外,我有不同的网站,我需要执行不同的行动清单。请注意,此列表的内容将取决于网站 我想开发一个GUI,以便能够使用c#和WPF编辑在给定站点SiteClass上执行的操作 我现在的想法是做以下工作: 从一个普通的抽象动作类AbstractActionClass中对不同的动作类ActionClass1进行子类化 创建AbstractActionClass的ActionList,其中将包含不同的操作

我有一个类似类型的操作列表,需要为其创建不同的类
ActionClass1
ActionClass2
。 此外,我有不同的网站,我需要执行不同的行动清单。请注意,此列表的内容将取决于网站

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

我现在的想法是做以下工作:

  • 从一个普通的抽象动作类
    AbstractActionClass
    中对不同的动作类
    ActionClass1
    进行子类化
  • 创建
    AbstractActionClass
    ActionList
    ,其中将包含不同的操作作为具体实现(例如
    ActionClass1
    等)
  • 创建
    SiteClass
    实例的列表
    SiteList
    ,该列表将包含站点及其相应的操作列表和附加信息(如站点位置等)
  • 到目前为止,我对上述内容有一个相当好的想法。但是,我现在需要能够编辑每个站点的
    ActionList
    ,并在GUI中设置样式,以便具有相同
    ActionList
    的所有站点看起来都相同(例如,颜色相同)。因此,我需要能够比较
    SiteList
    SiteClass
    的每个实例的
    ActionList
    ,以检查它们是否不同,找出有多少不同的实例,然后在GUI中相应地设置它们的样式

    因此,我的问题是:我能否在
    SiteClass
    中使用
    ActionList
    类型的列表,以便执行诸如“Unique”等比较,以找出
    ActionList
    内部
    ActionList
    的唯一出现次数,并将此信息用于样式设置?有更好的办法吗?

    简短的回答:有

    详细的回答。您可以创建一个
    列表
    ,要处理不同的渲染,可以采取两种方法:

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

    public abstract string ClassType { get; }
    
  • 并在每个不同的操作列表中作为一个简单的

    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;
      }
    
  • 你可以做一些简单的铸造:

    if (ac is ActionClass1)
    {
        /// render according to class 1
    }
    else if (ac is ActionClass2)
    {
       ///  render according to class 2
    }
    
  • 您可以提取列表本身:

    public class ActionClassList : List<ActionClass>
    {
        public abstract string ClassType { get;}
    }
    
    公共类ActionClassList:列表
    {
    公共抽象字符串类类型{get;}
    }
    
  • 并实现ActionClassList1和ActionClassList2以返回不同的类类型

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

    简短回答:是

    详细的回答。您可以创建一个
    列表
    ,要处理不同的渲染,可以采取两种方法:

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

    public abstract string ClassType { get; }
    
  • 并在每个不同的操作列表中作为一个简单的

    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;
      }
    
  • 你可以做一些简单的铸造:

    if (ac is ActionClass1)
    {
        /// render according to class 1
    }
    else if (ac is ActionClass2)
    {
       ///  render according to class 2
    }
    
  • 您可以提取列表本身:

    public class ActionClassList : List<ActionClass>
    {
        public abstract string ClassType { get;}
    }
    
    公共类ActionClassList:列表
    {
    公共抽象字符串类类型{get;}
    }
    
  • 并实现ActionClassList1和ActionClassList2以返回不同的类类型


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

    是。在C#中可以通过多种方式实现这一点,但C#list在这方面不是一个坏主意,因为您对C#list很熟悉,并且可以更好地理解这一想法,所以我不会说使用C#list有什么错。

    是的。在C#中可以通过多种方式实现这一点,但C#list在这方面并不是一个坏主意,因为您对C#list很熟悉,也能更好地理解这一点,所以我不会说使用C#list有什么错。

    MVVM和日期模板是一个不错的选择。在viewmodel中,您将拥有
    ObservableCollection
    ,其中
    T
    是抽象类或简单接口,用于访问视图中所需的属性/方法
    Unique
    属性必须通过向该集合添加/从中删除的方法来处理。MVVM和日期模板是解决方法。在viewmodel中,您将拥有
    ObservableCollection
    ,其中
    T
    是抽象类或简单接口,用于访问视图中所需的属性/方法
    Unique
    属性必须由添加到该集合或从中删除的方法处理。