C# Linq 选择和强制转换没有错误



有没有更干净的方法来获取吠叫的狗列表?

public abstract class Mammal
{
public bool sweat_glands;
public bool is_aquatic;
}
public class Whale: Mammal
{
public Whale() { is_aquatic = true; }
}
public class Dog: Mammal
{
public bool Barks { get; set; }
public Dog() { is_aquatic = false; }
}
class Program
{        
static void Main(string[] args)
{
List<Mammal> mammals = new List<Mammal>();
mammals.Add(new Whale());
mammals.Add(new Dog() { Barks = false });
List<Dog> dogs = (from c in mammals where c is Dog && ((Dog)c).Barks.Equals(true) select c).Cast<Dog>().ToList();
}
}

如果我执行以下操作,我会在最后一行出现编译错误:为源类型 IEnumerable 找到了查询模式的多个实现。对选择的不明确调用。

List<Dog> dogs = (from c in mammals where c is Dog && ((Dog)c).Barks.Equals(true) select (Dog)c).ToList();

谢谢!

你的代码对我来说很好用。您可以使用OfType简化它:

var dogs = mammals
.OfType<Dog>()
.Where(d => d.Barks);

无需在一行上完成整个操作,这可能会令人困惑。

List<Dog> dogs = (from c in mammals 
let d = (c as Dog)
where 
d != null && d.Barks
select d
).ToList();

相关内容

最新更新