像c#中的枚举一样



在JavaScript中,我可以在每个单元格中拥有不同对象的数组,并且在枚举它时,每个单元格将被视为对象,而不是作为集合的底层公共对象。

假设我有两个对象:

class car
{
    public color;
    ...
}
class paint
{
    public color;
    ...
}

是否有类似

的枚举语法?
car beemer;
paint panda;
...
foreach (thing in [beemer, panda])
{
    thing.color = "red";
}
在c#

吗?

如果你真的需要的话,你可以使用动态类型:

public class Paint
{
    public string Color { get; set; }
}
public class Car
{
    public string Color { get; set; }
}
...
var objects = new object[]
{
    new Car { Color = "Red" },
    new Panda { Color = "Black" }
};
foreach (dynamic value in objects)
{
    Console.WriteLine(value.Color);
}

但是更传统的做法是声明一个带有你想要的属性的接口,然后让所有相关的类型实现这个接口:

public interface IColored
{
    string Color { get; set; }
}
public class Paint : IColored
{
    public string Color { get; set; }
}
public class Car : IColored
{
    public string Color { get; set; }
}
...
var objects = new IColored[]
{
    new Car { Color = "Red" },
    new Panda { Color = "Black" }
};
foreach (IColored value in objects)
{
    Console.WriteLine(value.Color);
}

这是:

  • 更有效的
  • 更安全,因为在编译时你知道你迭代的每个值都有一个Color属性。

如果你实现一个接口,在接口上定义颜色属性就可以实现这一点。

public interface IHasColor 
{
  string color { get; set; }
}
public class car : IHasColor
{
    public color { get; set; }
    ...
}
foreach (IHasColor thing in new IHasColor[] { beemer, panda })
{
    thing.color = "red";
}

最新更新