我正在编译一个最初在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语句来防止发生此错误。但这不是我想要的,我需要这个代码才能工作。 除了编译器之外,此应用程序没有以任何方式进行更改。
答案 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 。