更优雅的方式定义数组内容

时间:2013-12-31 10:34:18

标签: c# arrays xna

我正在尝试定义数组的内容。下面显示了一种实现我想要的方式的简化示例。

有更好的方法吗?这似乎是一种非常混乱的方式来实现我认为应该轻松完成的事情。我可以使用列表吗?或者数据库是否有效(我对如何使用数据库一无所知,但觉得这是他们擅长的事情)。

提前致谢

        for (int i = 0; i < NumberOfBoxes; i++)
        {

            BoxName[0] = "Blue box";
            if (i == 1) { break; }
            BoxName[1] = "Red box";
            if (i == 2) { break; }
            BoxName[2] = "Yellow box";
            if (i == 3) { break; }
            BoxName[3] = "Green box";
            if (i == 4) { break; }
            BoxName[4] = "White box";
            if (i == 5) { break; }
            BoxName[5] = "Black box";
            if (i == 6) { break; }
        }

我真正想要做的就是使用这段代码:

            BoxName[0] = "Blue box";
            BoxName[1] = "Red box";
            BoxName[2] = "Yellow box";
            BoxName[3] = "Green box";
            BoxName[4] = "White box";
            BoxName[5] = "Black box";

如果只有4个盒子,那么编译器就会神奇地知道忽略BoxName [4]和BoxName [5],而不是像现在这样抛出错误。

6 个答案:

答案 0 :(得分:4)

您可以尝试使用 Linq

// All possible boxes
String[] possibleBoxes = new String[] {
  "Blue box",
  "Red box",
  "Yellow box",
  "Green box",
  "White box",
  "Black box"
};

int numberOfBoxes = 4; // Or 6 or 3...

String[] BoxName = possibleBoxes.Take(numberOfBoxes).ToArray();

答案 1 :(得分:2)

您可以使用所有选项创建一个数组,然后根据需要进行复制:

// This declaration could be for a private static readonly variable, given that
// you won't change the contents
string[] allBoxes = { "Blue box", "Red box", "Yellow box", "Green box",
                      "White box", "Black box" };
Array.Copy(allBoxes, BoxName, NumberOfBoxes);

如果您还没有阵列,可以使用List<string>,完全填充,然后使用List<T>.RemoveRange修剪它:

List<string> boxes = new List<string> { "Blue box", "Red box", "Yellow box",
                                        "Green box", "White box", "Black box" };
boxes.RemoveRange(numberOfBoxes, boxes.Count - numberOfBoxes);

或者使用LINQ:

List<string> boxes = new[] { "Blue box", "Red box", "Yellow box",
                             "Green box", "White box", "Black box" }
                     .Take(numberOfBoxes)
                     .ToList(); // Or ToArray if you really want an array

有很多选择。

虽然你的情况并不是很清楚 - 可能有更好的选择。有了更多的背景,我们可以更好地帮助您。

答案 2 :(得分:0)

您可以做的是在字典中定义所有可能值及其关联索引的列表,并通过拾取字典中的项目来构建数组。

var dic = new Dictionary<int, string> 
{
    { 0, "Blue box" },
    { 1, "Red box" }, 
    { 2, "Yellow box" }, 
    { 3, "Green box" }, 
    { 4, "White box" }, 
    { 5, "Black box" } 
};

string[] boxName = new string[4];   // only 4 items
for (int i = 0; i < boxName.Length; i++)
{
    boxName[i] = dic[i];
}

答案 3 :(得分:0)

我不确定我是否真的了解你的问题,但希望这会有所帮助:

List<string> BoxName = new List<string>() {"Blue box", "Red box", ...};

如果您想循环浏览列表,请使用:

BoxName.Count();

所以你不会有超出范围的例外。

答案 4 :(得分:0)

我不知道,如果你需要这个解决方案:

var BoxName = new string[] {"Blue box", "Red box", "Yellow box", "Green box", "White box",  "Black box" };

答案 5 :(得分:0)

我已经设法通过try / catch语句在短期内解决了这个问题。抱歉不要更清楚地问这个问题,因为如果我能更好地解释自己,这可能是一个非常明显的解决方案。