编译错误Nullreference

时间:2012-09-04 10:06:54

标签: c# compilation

我正在编译一个最初在Visual C#2005中构建的程序。我正在使用visual C#2010。在以下函数上运行程序时,我不断收到“NullReference Execption未处理”错误: DataBuffer行发生错误。 DataBuffer是一个在初始化时设置为null的私有字符串。

if (DataBuffer.Contains(ok)) 
            {
                okFound = true;
            }

    string temp = getLine(DataBuffer.Substring(mylocation));
    if (!checkTypeFound())
    {
        if (temp != null)
        {
            parseDeviceType(temp);
        }
        checkTypeFound();
    }

当我检查上面的代码中DataBuffer的值是什么时(当我得到错误时),这不是null。它实际上包含我期望的数据。 DataBuffer信息在此函数中加载:

private void ser1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    while (ser1.BytesToRead > 0)
    {
        string data = ser1.ReadExisting();
        DataBuffer += data;
    }
}

串口在代码中的其他位置打开。只有编译器不同,代码才有变化。我应该添加什么行,以及在哪里解决此错误?注意,我可以使用if和try-catch语句来防止发生此错误。但这不是我想要的,我需要这个代码才能工作。 除了编译器之外,此应用程序没有以任何方式进行更改。

3 个答案:

答案 0 :(得分:1)

在调用方法之前,您应该检查DataBuffer是否为null

if (DataBuffer != null && DataBuffer.Contains(ok)) 
{
    okFound = true;
}

// or simpler:
okFound = (DataBuffer != null && DataBuffer.Contains(ok));

并且您的第二个代码也应该检查null

string temp = String.Empty;

if (DataBuffer != null)
    temp = getLine(DataBuffer.Substring(mylocation));

if (!checkTypeFound())
{
    if (!String.IsNullOrEmpty(temp))
        parseDeviceType(temp);

    checkTypeFound();
}

答案 1 :(得分:1)

尝试使用以下内容:

if (DataBuffer != null && DataBuffer.Contains(ok)) 
{
   okFound = true;
}

答案 2 :(得分:0)

您应该在构造函数中将DataBuffer的值设置为null以外的值。如果您不能这样做,那么您可以将其设置为string.Empty而不是null以避免空例外。但是在对象上启动实例方法之前,最好检查null