我正在尝试定义数组的内容。下面显示了一种实现我想要的方式的简化示例。
有更好的方法吗?这似乎是一种非常混乱的方式来实现我认为应该轻松完成的事情。我可以使用列表吗?或者数据库是否有效(我对如何使用数据库一无所知,但觉得这是他们擅长的事情)。
提前致谢
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],而不是像现在这样抛出错误。
答案 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语句在短期内解决了这个问题。抱歉不要更清楚地问这个问题,因为如果我能更好地解释自己,这可能是一个非常明显的解决方案。