Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq过滤可观察的集合_C#_Linq - Fatal编程技术网

C# 使用linq过滤可观察的集合

C# 使用linq过滤可观察的集合,c#,linq,C#,Linq,我有一门动物课。一个食草动物类继承自动物,一个大象类继承自食草动物。我还有一个肉食动物类继承自动物,还有一个老虎类继承自肉食动物。我有一个可以观察到的收藏,叫做动物园,里面有老虎和大象。我想挑选动物园收藏中的食草动物。然后我想把食草动物添加到一个新的可观察的集合中,称为herb var herbivores = from Animal in zoo where Animal == Animal.OfType<Herbivore>()

我有一门动物课。一个
食草动物
类继承自动物,一个
大象
类继承自
食草动物
。我还有一个
肉食动物
类继承自
动物
,还有一个
老虎
类继承自
肉食动物
。我有一个可以观察到的收藏,叫做动物园,里面有老虎和大象。我想挑选动物园收藏中的食草动物。然后我想把食草动物添加到一个新的可观察的集合中,称为herb

var herbivores = from Animal in zoo
                 where Animal == Animal.OfType<Herbivore>()
                 select Animal;

foreach (var item in herbivores)
{
    herb.Add(item);
}                        
var herbivores=来自动物园的动物
其中,Animal==Animal.OfType()
选择动物;
foreach(草食动物的var项目)
{
添加(项目);
}                        

你不能用那种类型的
;它是可枚举集合上的扩展方法,而不是类
animal
。改为这样做:

var herbivores = zoo.OfType<Herbivore>();

但是,用这种时髦的方式做这件事是没有意义的。

你在这里没有问任何问题。很抱歉,它会出错。我哪里做错了?你需要解释你的错误是什么,它们在哪里。只说“它在犯错误”是没有帮助的。您需要详细描述您尝试的解决方案中存在的问题。此外,之后没有理由进行
for
-循环。我不知道
herb
是从哪里来的,但是你可以将
herbivors
传递到构造函数中,如果要保留现有数据,请使用
AddRange
。OfType和Where..之间的区别在于,在第一种情况下,食草动物将是
IEnumerable
,而第二种将是
IEnumerable
。如果您更喜欢LINQ语法(并且希望类型保持为animal),还可以将第二个表达式表示为
,它来自一个动物园中的一个食草动物
var herbivores = zoo.Where(a => a is Herbivore);