1

我是新来的,我尝试过查看旧问题,但我也是 c# 的新手,我发现很难解决下面的问题:

if (File.Exists(@"C:\ESC\Impostazioni.txt"))
{
    TextReader lettore_file = new StreamReader(@"C:\ESC\Impostazioni.txt");
    String opzioni = lettore_file.ReadLine();

    int i;
    for (i = 0; i < opzioni.Length; i++) <----here, indicating "i=0"
    {
        if (opzioni[i] == '-')
        {
             char[] coloregenerale = new char[i];
             for (int j = 0; j < i; j++)
               coloregenerale[j] = opzioni[j];

           break;
4

5 回答 5

6

在尝试遍历每个字符之前,您应该检查字符串值是否为空或空,如下所示:

if(!String.IsNullOrEmpty(opzioni))
{
    // Put loop through character logic here
}
于 2013-07-29T17:07:18.880 回答
3

您需要在调用后调试并确定您的opzioni字符串是否为空引用String opzioni = lettore_file.ReadLine();

此外,您可能应该在 for 循环中声明 i,而不是在它之前,如下所示。

for (int i = 0; i < opzioni.Length; i++)

于 2013-07-29T17:08:31.317 回答
1

该代码中有几个错误:

你错过了一个using声明

您没有检查StreamReader.ReadLine.

看起来你正在重新实现string.Substring.

样本:

if (File.Exists(@"C:\ESC\Impostazioni.txt"))
{
    using (var letterFile = new StreamReader(@"C:\ESC\Impostazioni.txt"))
    {
        var opzioni = letterFile.ReadLine();

        if(string.IsNullOrWhiteSpace(opzioni))
        {
            // end of file
        }

        var dashIndex = opzioni.IndexOf("-");

        string coloregenerale = dashIndex > -1
                                    ? opzioni.Substring(0, dashIndex)
                                    : opzioni;
    }
}
于 2013-07-29T17:14:27.873 回答
0

opzioni 可能有机会null在该特定索引上获得价值,更好地处理该行内的IsNullorEmptyCondition

char[] coloregenerale = new char[i];
            for (int j = 0; j < i; j++)
              {
                if( String.IsNullOrEmpty(opzioni[j] == false ) // This is mandatory check at this place
                coloregenerale[j] = opzioni[j];
              }
于 2013-07-29T17:16:01.267 回答
0

如果您的空引用异常发生在指示的行上,那么罪魁祸首可能是 opzioni 变量。如果之前对 lettore_file.ReadLine() 的调用返回 null,则当您尝试在 for 循环中获取它的长度时,opzioni 将为 null。这将引发您遇到的异常。一种解决方案是在进入循环之前检查该变量是否为空

于 2013-07-29T17:09:28.043 回答