对象引用未设置为对象EDIT的实例

时间:2013-07-29 17:03:24

标签: c# nullreferenceexception

我是新来的,我尝试查看旧问题,但我也是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;

5 个答案:

答案 0 :(得分:6)

在尝试循环遍历每个字符之前,您应该检查字符串值是null还是空,如下所示:

if(!String.IsNullOrEmpty(opzioni))
{
    // Put loop through character logic here
}

答案 1 :(得分:3)

您需要进行调试,并在致电opzioni

后查明您的String opzioni = lettore_file.ReadLine();字符串是否为空引用

另外,你应该在for循环中声明我,而不是在它之前声明,如下所示。

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

答案 2 :(得分:1)

该代码中有几个错误:

您错过了using statement

您没有查看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;
    }
}

答案 3 :(得分:0)

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

之前检查该变量是否为null

答案 4 :(得分:0)

opzioni可能在该特定索引上有null值,使用IsNullorEmpty条件更好地处理该行内部

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];
              }