如何解决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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。