C# C字符串连接超出范围错误

C# C字符串连接超出范围错误,c#,string-concatenation,C#,String Concatenation,我正在利用标签类中的Get String函数将要打印在位图上的行放在一起。程序编译得很好,前面的表单正确地传递了LabelQueue,在我尝试打印位图之前,它看起来没有问题。此特定初始值设定项/构造函数的所有代码如下所示。错误的代码行是C++前函数的最后三行。 如果您需要我添加更多必要的代码,请告诉我 我得到一个IndexOutfrange异常,声称它超出了数组的边界 private LabelQueue lq; public Print(LabelQueue queue) {

我正在利用标签类中的Get String函数将要打印在位图上的行放在一起。程序编译得很好,前面的表单正确地传递了LabelQueue,在我尝试打印位图之前,它看起来没有问题。此特定初始值设定项/构造函数的所有代码如下所示。错误的代码行是C++前函数的最后三行。 如果您需要我添加更多必要的代码,请告诉我

我得到一个IndexOutfrange异常,声称它超出了数组的边界

private LabelQueue lq;
    public Print(LabelQueue queue)
    {
        InitializeComponent();
        lq = queue;
        pictureBox1.Image = new Bitmap(2550, 3300);

        System.Drawing.Graphics formGraphics = this.CreateGraphics();
        System.Drawing.Font textFont = new System.Drawing.Font("Times New Roman", 8);
        System.Drawing.SolidBrush textBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
        System.Drawing.StringFormat textFormat = new System.Drawing.StringFormat();

        int x, y, c = 0;

        while (c < 30)
        {
            // Get coordinates for where to put values.
            x = ((c % 3) * 600) + 300;
            // Accounts for column gap
            if (c % 3 > 0)
                x = x + ((c % 3) - 1) * 75;
            y = ((c % 10) * 270) + 300;

            string firstLine, secondLine, thirdLine;

            firstLine = lq.labels[c].GetLastName() + ", " + lq.labels[c].GetFirstName() + " " + lq.labels[c].GetMiddleName();
            secondLine = lq.labels[c].GetNewStreet();
            thirdLine = lq.labels[c].GetNewCity() + ", " + lq.labels[c].GetNewState() + lq.labels[c].GetNewZIP() + lq.labels[c].GetNewCountry();

            formGraphics.DrawString(firstLine, textFont, textBrush, x, y, textFormat);  // Line turning up the error
            formGraphics.DrawString(firstLine, textFont, textBrush, x, y + 10, textFormat);  // Naturally, both these lines would need to be fixed too
            formGraphics.DrawString(firstLine, textFont, textBrush, x, y + 20, textFormat);

            c++;
        }

    }
如果不能可靠地证明问题,就不可能确定您需要的确切修复方法

然而,根据这个问题的信息和到目前为止的评论,您似乎没有正确地限制循环。while语句应如下所示:

while (c < lq.Count())
请注意,上面使用的是Enumerable.Count扩展方法。我选择这个作为答案,因为您没有包含LabelQueue对象的声明/实现,所以无法确定正确的语法是什么,但是扩展方法可能会起作用,因为几乎任何支持索引器的合理集合类型都会实现一些接口,使Enumerable.Count方法能够很好地工作

也就是说,您的类型可能有一个Count属性,您可以使用它来代替Count扩展方法。两者都同样有效

最后,请回答您自己的问题,以供将来参考。只是你的答案实际上应该是一个答案。也就是说,它需要清楚地解释什么地方出了问题,以及你做了什么来修复它。写作问题已解决,不算答案


对于这件事,如果你不喜欢我的答案,你想写你自己的,你仍然可以这样做。如果你愿意,你甚至可以接受你自己的答案而不是我的。只需确保这是一个真实的答案。

您根本不是在位图上绘制,而是在显示器上绘制。使用debuggerAgh应该很容易找到异常。我的错误。那么,如何让它绘制到声明的位图呢?我承认,我不知道,谷歌搜索答案对我没有帮助。@TreyBrumley-我想我已经成功了,可以打印位图了。但是仍然没有解决字符串连接问题。lq.labels中有多少个标签?很可能不到30。。。lq.labels是数组吗?使用lq.labels.Length属性检查元素数。对于列表,您应该检查Count属性。