【问题标题】:Converting string to string array: Runtime Exception将字符串转换为字符串数组:运行时异常
【发布时间】:2017-05-22 05:07:48
【问题描述】:

我有一个非常简单的代码:

using System;
using System.Linq;
using System.Windows;
using System.IO;

namespace _3DPrinter_Test1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {    
            InitializeComponent();

            foreach (string CurrentLine_Raw in File.ReadAllLines( 
                "@D:\3Dprinter\TestObject1.gcode"))
            {
                string[] CurrentLine_Array = 
                    CurrentLine_Raw.Select(c => c.ToString()).ToArray();

                TextBox_Test.Text = CurrentLine_Array[0];
            }
        }
    }
}

线

TextBox_Test.Text = CurrentLine_Array[0];

给我一​​个 IndexOutOfRangeException

在我看来是因为这条线:

string[] CurrentLine_Array = CurrentLine_Raw.Select(c => c.ToString()).ToArray();

但是当我用这一行替换上面的内容时:

string[] CurrentLine_Array = { "Hello World" };

然后我可以在我的文本框中阅读 Hello World

stringstring[] 的转换我做错了吗?

【问题讨论】:

  • 您在Select 电话中想做什么?如果文件中的某些行没有任何字符,则会出现异常。检查CurrentLine_Array.Length 以查看数组中是否有任何内容。
  • 好的,这是我的错...我的 .gcode 文件中的一行根本没有包含任何字符。我只是将整个循环放入 try{} 和 catch{} 函数中,它现在可以工作了 :)
  • 您不需要...在这里捕获异常!只需检查数组的长度是否大于0!
  • 当然,你是对的。
  • 空行仍然是一行。只是一个\n 字符。但返回的字符串将为空。顺便说一句,您键入的内容会将行中的每个字符转换为字符串。也许您正在寻找 Split() ?即使那样,该循环替换文本框的内容。只有最后一行的内容对用户可见。您确定吗?那为什么不直接跳到最后呢?

标签: c# arrays string visual-studio type-conversion


【解决方案1】:

您的文件中可能有一个或多个空行。

你可以通过检查数组大小是否大于0来轻松解决这个问题。

像这样:

 if (CurrentLine_Array.Length > 0)
        {
            // DO SOMETHING
        }

IndexOutOfRangeException. 主要是由于试图在一个实际上小于您要查找的索引的数组中获取相应索引的值。

【讨论】:

    【解决方案2】:

    我想我在这里看到了问题:

    File.ReadAllLines("@D:\3Dprinter\TestObject1.gcode")
    

    应该读作

    File.ReadAllLines(@"D:\3Dprinter\TestObject1.gcode")
    

    目前的情况,它可能没有找到文件并返回空值;因为字符串允许为空,所以它进入循环一次,然后在尝试从不存在的数组中获取值时跌倒。

    【讨论】:

    • 哦,刚刚出现了类型错误...这个错误不在我的实际程序中,否则它会直接在 foreach 循环中给我一个 RuntimeException .顺便说一句,解决方案在原始问题的 cmets 中:)
    • 啊,干杯,没看到。我在编程时总是使用 try 和 catch 并尽可能多地将我的值扔给错误报告,这样我就可以确切地知道发生了什么。
    猜你喜欢
    • 2014-10-25
    • 2014-08-28
    • 2011-06-18
    • 2017-11-27
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多