【问题标题】:How can i shorten this new object code?我怎样才能缩短这个新的目标代码?
【发布时间】:2017-08-21 18:05:52
【问题描述】:

我知道这是一个愚蠢的问题,它可能很容易,但我盯着屏幕看了 3 个小时,我似乎仍然无法弄清楚。知道如何缩短此代码吗?我的班级 Car.cs 中有 public enum Typepublic enum Size

        Car car1 = new Car((CarType)0, (Size)0);
        Car car2 = new Car((CarType)0, (Size)1);
        Car car3 = new Car((CarType)0, (Size)2);
        Car car4 = new Car((CarType)1, (Size)0);
        Car car5 = new Car((CarType)1, (Size)1);
        Car car6 = new Car((CarType)1, (Size)2);
        Car car7 = new Car((CarType)2, (Size)0);
        Car car8 = new Car((CarType)2, (Size)1);
        Car car9 = new Car((CarType)2, (Size)2);

编辑:我用这样的方法打印它们

        Group1Print(car1, car2, car3);
        Group2Print(car4, car5, car6);
        Group3Print(car7, car8, car9);

【问题讨论】:

  • 创建一个数组,做一个循环,除法,取模
  • 两个嵌套循环怎么样。
  • @SamiKuhmonen 你可以在你的第二步停下来。
  • 当你可以合二为一时,为什么要两个循环。
  • 没有名为 Type 的枚举。这与内置的System.Type 冲突。考虑明确地将其设为CarType(或Make,或Model,或Brand,具体取决于实际情况)或将这些“类型”子类设为Car

标签: c# object enums


【解决方案1】:

试试这个:

        var cars = new List<Car>();
        foreach (Type type in Enum.GetValues(typeof(Type)))
        {
            foreach (Size size in Enum.GetValues(typeof(Size)))
            {
                cars.Add(new Car() {Size = size, Type = type});
            }
        }

或 LINQ 版本:

var cars = (from Type type in Enum.GetValues(typeof(Type))
            from Size size in Enum.GetValues(typeof(Size))
            select new Car() {Size = size, Type = type}).ToList();

【讨论】:

  • 你的第一个版本好多了,现在你让它变得不可读了
  • 届时会改回来
【解决方案2】:
var cars = Enumerable.Range(0, 9)
                     .Select(i => new Car((Type)(i / 3), (Size)(i % 3)))
                     .ToArray();

【讨论】:

  • (请注意,这只是因为枚举是方形的)
  • 现在您所要做的就是永远不要再将成员添加到枚举中!否则,祝你好运弄清楚如何更改循环。
  • 只要它们是方形的或一组是另一组的倍数,单一外观将非常容易。尽管可以遵循任何模式,并且如果需要其他倍数,您只需缩短集合。 (我想这对某些人来说可能很难,但希望大多数开发者都擅长数学。)
  • 足够聪明的开发人员可以理解这在 C# 中的作用,不需要问原始问题。然而,更糟糕的是,这个代码很容易被打破,因为在添加成员时忘记更改它,因为没有明确的迹象表明这是必要的。 93 已成为魔法常数。这很简单,简短且错误。
  • 看到这个家伙是硬编码值而不是使用枚举值我真的没有看到问题。除了烦人(这让我喜欢把这个答案留在这里:)
【解决方案3】:

我尝试过这样的事情。似乎是一个有效的答案。感谢您的帮助。

public List<Car> CarList = new List<Car>();

private void Form1_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                CarList.Add(new Car((CarType)i, (CarSize)j));
            }
        }

        Group1Print(CarList[0], CarList[1], CarList[2]);
        Group2Print(CarList[3], CarList[4], CarList[5]);
        Group3Print(CarList[6], CarList[7], CarList[8]);
    }

【讨论】:

  • 只有在没有其他人回答的情况下,您才应该回答自己的问题。您在这里有两个答案,一个与您提供的答案几乎相同。如果它们对您有所帮助,您应该将其中一个标记为正确。
  • 感谢您的鼓励。我只是想展示是什么帮助了我,以防有人可能会寻找相同的答案。我标记正确的答案帮助了我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2020-10-08
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
相关资源
最近更新 更多