我试图找到一个抽象类的所有子类,这些子类在List<string>
属性中具有与另一个List<string>
匹配的匹配项。
关于标准属性(string
、int
等)的Stack Overflow有足够的例子,但这个列表似乎让我感到困惑。
下面是我的例子:
public abstract class BaseClass
{
internal abstract List<string> Employees();
}
public class ChildClass : BaseClass
{
internal override List<string> Employees()
{
return new List<string>()
{
"John",
"Mary",
};
}
}
现在,我想找到所有继承自BaseClass
的子类,这些子类在预定义字符串中包含Employee名称。
List<string> lookupList = new List<string>() { "Mary", "Peter" };
var allSubClasses = typeof(BaseClass)
Assembly.GetTypes()
.Where(t => t.IsSubclassOf(typeof(BaseClass)) && !t.IsAbstract)
.Select(t => (BaseClass)Activator.CreateInstance(t));
var matchingSubClasses = (from q in allSubClasses
where (q as BaseClass).Employees().Any(lookupList) //Compile error on this line
select (q as BaseClass)).ToList();
这将返回我的ChildClass
,因为雇员姓名“玛丽”出现在查找列表中。
我在指示的行中收到编译器错误:
无法从“系统.集合.泛型.列表”转换为“系统.函数”
虽然这个错误是有道理的,但我似乎找不到修复它的方法:(
1条答案
按热度按时间gorkyyrv1#
要检查对象的Employees列表中是否出现
lookupList
,可以使用说明:这确定了两个列表的交集(即,在两者中都出现的元素),并且检查该交集是否包含任何元素。
因此,这将适用于您的情况: