Bla*_*dly 2 c# iteration interface list
我不知道为什么我不能通过我接口的类遍历列表。
例如。
public interface IAnimal
{
string Name { get; set; }
}
public class Chicken:IAnimal
{
public string Name { get; set; }
}
public class Dog:IAnimal
{
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
var AnimalList = new List<IAnimal>();
var Chicken1= new Chicken() { Name = "Chicken" };
var Dog1= new Dog() { Name = "Dog" };
AnimalList.Add(Dog1);
AnimalList.Add(Chicken1);
foreach (Dog obj in AnimalList)
{
Console.WriteLine(obj.Name);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么,有没有更好的角度来处理这种情况。
您已经定义了您的列表,以便它包含 的元素IAnimal。
var AnimalList = new List<IAnimal>();
Run Code Online (Sandbox Code Playgroud)
然后在循环中将元素指定为Dog. 现在 whileDog确实实现了IAnimal它不是唯一的类型。因此,如果列表包含的类型不是Dog那么您的循环就会失败。
所以你有两种方法来解决这个问题。
一是你改变你的循环是这样的:
foreach (IAnimal obj in AnimalList)
{
Console.WriteLine(obj.Name);
}
Run Code Online (Sandbox Code Playgroud)
如果你这样做,你的代码就可以正常工作并输出狗和鸡的名字。
但是,如果您只想返回Dog实例,您可以过滤列表。你会这样做:
foreach (Dog obj in AnimalList.OfType<Dog>())
{
Console.WriteLine(obj.Name);
}
Run Code Online (Sandbox Code Playgroud)
现在它只会输出狗的名字。
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |