JS喜欢C#中的enumaration

时间:2016-09-07 09:19:54

标签: c# dynamic enumeration

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

假设我有两个对象:

class car
{
    public color;
    ...
}

class paint
{
    public color;
    ...
}

是否存在类似

的语法
car beemer;
paint panda;
...
foreach (thing in [beemer, panda])
{
    thing.color = "red";
}

在c#中?

2 个答案:

答案 0 :(得分:5)

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

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属性。

答案 1 :(得分:3)

如果使用界面上定义的颜色属性实现接口就能实现此目的。

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";
}