JS喜欢C#中的enumaration

Sha*_*rot 1 c# enumeration dynamic

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

可以说我有两个对象:

class car
{
    public color;
    ...
}

class paint
{
    public color;
    ...
}
Run Code Online (Sandbox Code Playgroud)

是否存在类似于enumaration的语法

car beemer;
paint panda;
...
foreach (thing in [beemer, panda])
{
    thing.color = "red";
}
Run Code Online (Sandbox Code Playgroud)

在c#?

Jon*_*eet 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);
}
Run Code Online (Sandbox Code Playgroud)

但是,使用所需的属性声明接口会更常规,然后使所有相关类型实现接口:

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);
}
Run Code Online (Sandbox Code Playgroud)

这是:

  • 更高效
  • 更安全,就像你在编译时知道的那样,你迭代的每个值都有一个Color属性.