C#未将对象引用设置到对象的实例(诡异)

这是一个类里的函数 报错位置在temp那块
public void AddToText(string value)
{
string temp = value.Substring(value.Length - 3);
if (value.Substring(0, 4) == "ANY(")
{
text[num++] = new Any_Saver(value);
if (value.Contains("\\e\""))
{
Ended = true;
}
}
else
{
text[num++] = new String_Saver(value);
if (temp == "\\e\"")//就是在这里报错的 本来我是把那个式子写在这里的 但是报错 改成赋给temp再比较还是报错 不知道是什么原因 还有如果把temp=value.substring(...);那句写在这句前边报错的就是那句 不知道原因 纠结
{
Ended = true;
}
}
}

第1个回答  2011-05-17
首先,你确定value一定大于等于3个字符?
string temp="";
if(value.Length>3)
{
temp = value.Substring(value.Length - 3);
}
else
return;

但是,我觉得对象引用问题,不会是temp=null的问题,因为如果value.Length<3,那么在获取字符串的时候就应该会提示 索引越界 相关错误。

而如果value=null; 通过value来访问属性或方法,必定产生 对象引用 问题。
请自行断点监视一下。
你调用的另外两个方法,应该是改变了value的值。改变后value可能为空。
第2个回答  2011-05-16
temp的值有可能是null。
value.Substring(value.Length - 3);考虑length小于3的情况。

if (temp == "\\e\"")//这里判断时,最好增加一个条件:
if(temp != null )
{
if(temp =="\\e\")...
}
第3个回答  2011-05-16
设哥断点看看值的变化不就知道了 估计是你value传了空值吧?追问

我当然设了 value不是空值 而且也有好好计算出substring()的结果

追答

value的长度够吗 也有可能substring截取之后的问题

本回答被提问者采纳