Lambda表达式,用于在DerivedClass中定义属性时从List <BaseClass>获取属性列表

问题描述

我正在编写代码以在不同应用程序之间交换信息。所有应用程序都定义相同的实体,但并非全部都存储相同的信息。

所有应用程序都定义动物类,但:

  • ApplcationA指定:属,物种,地理分布
  • ApplcationB指定:属,物种,估计种群

我有一个独立的dll应用程序(MyApplication.dll),其中定义了具有常见信息的类MyAnimal:

public class MyAnimal
{
   public string Genus { get; set; }
   public string Species { get; set; }
}

和包含动物列表的类MyAnimals

public class MyAnimals
{
   public List<MyAnimal> ListOfAnimals { get; set; }
}

ApplicationA和ApplicationB提供dll来访问其信息。但是唯一的方法是创建一个插件,然后在应用程序内部执行它。

对于ApplicationA,创建了以下类

public class AppMyAnimal : MyAnimal
{
   public Animal SourceAnimal { get; set; } // the animal as defined by ApplicationA
   public bool IsSelected { get; set; }

   public AppMyAnimal(Animal animal)
   {
      // Set properties of Derived class
      SourceAnimal = animal;

      // Set properties of Base class
      Genus = animal.Genus;
      Species = animal.Species;
   }
}

public class AppMyAnimals : MyAnimals
{
   public AppMyAnimals()
   {
      ListOfAnimals = new List<MyAnimal>(); // List of animals of Base class MyAnimal; not of Derived class AppMyAnimal
   }
}

在ApplicationA中,我有一个函数可填充AppMyAnimals类中的动物列表:

  private void ReadAnimals()
  {
     AppMyAnimals my_animals = new AppMyAnimals();
     List<Animal> list_of_animals = ClassInApplicationA.GetAnimals(); // list of animals as defined by ApplicationA
     foreach (Animal i_animal in list_of_animals)
     {
        AppMyAnimal app_my_animal = new AppMyAnimal(i_animal);
        my_animals.ListOfAnimals.Add(app_my_animal); // ok to assing Derived type to Base type (covariance)
     }
  }

我有一张表格可以选择动物。选定的动物会将AppMyAnimal中的IsSelected属性设置为true。

我可以将AppMyAnimals和AppMyAnimal序列化为MyAnimals和MyAnimal,以将信息传递给ApplicationB。

但是在ApplicationA中,我想获取所选动物的列表,但要列出动物类(由ApplicationA定义):

List<Animal> list_of_selected_animals = ...

我的第一个问题是如何使用Lambda表达式进行操作。第二个问题是在这种情况下是否有更好的设置。

谢谢!

解决方法

我有List<MyAnimal>,当List<Animal>为真时,我需要IsSelected。对象MyAnimal和属性IsSelected在类AppMyAnimal

var listOfMyAnimal = new List<MyAnimal>();
var listOfSelectedAnimal = listOfMyAnimal
    .Where( x => x.IsSelected )
    .Select( x => x.SourceAnimal )
    .ToList();

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...