【发布时间】:2021-05-03 19:18:45
【问题描述】:
我有 4 节课:
人 - 抽象类
Student - 从 Person 继承的类
Teacher - 从 Person 继承的类
PersonProvider - 创建 list<A> 的静态类,此列表保留 Student 和 Teacher 的对象
现在,问题是,我有下面的查询向用户显示他的选择是他必须在学生或教师之间进行选择,但是如何将他选择的内容传递给下一个查询(所以列出所有学生或所有教师)?我不能只从控制台读取并将其传递给我的查询,因为 typeOf() 和 getType() 不适用于字符串:)。
以下查询返回列表中的不同类型,但我不知道如何进一步处理:
var listOfPersons = PersonProvider
.AvailablePersons
.Where(p => p.GetType().BaseType == typeof(Person))
.GroupBy(p => p.GetType().Name)
.Select(g => g.First())
.ToList();
foreach (var item in listOfPersons )
{
Console.WriteLine(item.GetType().Name);
}
这会返回:
Student
Techaer
现在用户应该在控制台中输入“学生”或老师,这样我就可以将它传递给我不知道如何构建的下一个查询。我正在考虑使用**Func<T, bool> predicate** 的通用扩展方法,但我不确定。
【问题讨论】:
-
正确地说你的意思是,
A是Person类,B是Student和C是Teacher? -
不是一个很好的问题,是吗?也许您要问的是如何从字符串名称创建类型的实例?如果是这样,请看这里:stackoverflow.com/questions/7598088/…
-
我不明白这个问题。如果用户可以在
Student和Teacher之间进行选择,您就知道它指的是什么类型。所以不需要解释字符串,switch就足够了。 -
对不起,我正在编辑它,我做了一些错别字。我保证下一个类型我会做得更好。我发现(在朋友的帮助下)我可以使用 GetType().Name ...
-
旁注:
.Where(p => p.GetType().BaseType == typeof(Person))可以写成.OfType<Person>()
标签: c# linq generics .net-core lambda