像c#中的枚举一样
本文关键字:一样 枚举 | 更新日期: 2023-09-27 18:06:05
在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";
}