【发布时间】:2020-08-14 18:42:18
【问题描述】:
我正在编写代码以在不同应用程序之间交换信息。所有应用程序都定义相同的实体,但并非所有应用程序都存储相同的信息。
所有应用程序都定义了 Animal 类,但是:
- 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 中,我想获取所选动物的列表,但属于 Animal 类(由 ApplicationA 定义):
List<Animal> list_of_selected_animals = ...
我的第一个问题是如何使用 Lambda 表达式。第二个问题是对于这种情况是否有更好的设置。
提前致谢!
【问题讨论】:
-
不确定我是否理解这个问题。你不是只需要抓住源动物吗?例如。
List<Animal> list_of_selected_animals = my_animals.Select( x => x.SourceAnimal) ).ToList() -
我有
List<MyAnimal>,当IsSelected为真时我需要List<Animal>。对象MyAnimal和属性IsSelected属于AppMyAnimal类。
标签: c# lambda covariance