在JavaScript中,我可以在每个单元格中包含一个不同对象的数组,并且在枚举它时,每个单元格都将被当作是对象,而不是作为集合的基础公共对象。

可以说我有2个对象:

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

关于c# - JS像C#中的枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39365945/

10-11 22:23
查看更多