C# 阻止条目所以你不会得到 "Index was outside the bounds of the array"

标签 c#

我有一种情况,我正在阅读 Material list 文件。 我只关心每行中的前两个字符串,然后我想转到下一行。当然,我是故意跳过前 3 行的,只是标题废话。

    foreach (string line in lines.Skip(3))
    {
        string[] entries = line.Split(null);

        creoBOM newCreoBOM = new creoBOM();

        newCreoBOM.identCode = entries[0];
        newCreoBOM.itemQty = entries[1];

        creoBOMA.Add(newCreoBOM);

        messageWindow.Text += entries[0] + " " + entries[1];
        messageWindow.AppendText(Environment.NewLine);
    }


    messageWindow.Text += "creoBOMFile Loaded";
    messageWindow.AppendText(Environment.NewLine);
}

如果文件每一行只有两个变量,那很好。 如果文件有很多超过 [0] 和 [1] 的条目,它会给我一个越界错误。

处理这种情况的最佳方法是什么?我目前正在使用 null char 进行拆分,因为 ITEM1 和 QTY1 始终由空格分隔,保证。它是由另一个软件生成的系统。我确信有一种简单的方法可以在读取 entries[1] 后换行。 entries[2+..n] 不应该存在,因为我不能保证每一行真正存在多少个条目。

读入文件时好的示例文件:

ITEM1 QTY1

ITEM2 QTY2

ITEM3 QTY3

读取文件时出错的示例文件:

ITEM1 QTY1 DESCRIPTION1 RANDOMJIBBERISH1

ITEM2 QTY2 RANDOMJIbberish2 DESCRIPTION2 SOMENEWVAR

ITEM3 QTY3

最佳答案

您可以使用 continue 来避免崩溃:

string[] entries = line.Split(null);
if (entries.Length<2)
   continue;

关于C# 阻止条目所以你不会得到 "Index was outside the bounds of the array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52067850/

相关文章:

c# - 在 WPF 应用程序的 BitmapImage 中展开 Canvas /透明背景

c# - WPF:同步 ItemsControl 中所有项目的宽度

c# - 如何通过基类中的方法返回通用类型?

c# - 字符串数组未正确序列化为 json?

c# - 我应该在 MSAL.NET 中使用什么类型的 ApplicationBuilder?我正在使用 ASP.NET Core Web Api

c# - C#使用NAudio转换WAV文件

c# - 写入文件时为 "Cannot access file"

c# - 依赖项的包版本无效

c# - 优秀的图书馆文件

javascript - 未找到 Google 扩展 native 消息传递主机