string str = ""这样初始化怎么下面还会有nullReferenceException呢

hulifang333 2009-06-29 10:26:27
调试代码时,在if(str.ToUpper() != "EX")这行抛了这个异常,请问各位大侠何解呢?本人第三天接触C#,呵呵
...全文
90 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jessezu 2009-06-30
  • 打赏
  • 举报
回复
inputstr = Console.ReadLine();
如果键盘没有输入则为null
showjim 2009-06-30
  • 打赏
  • 举报
回复
你查找inputstr的所有引用,看在哪些地方可能赋null值
hulifang333 2009-06-30
  • 打赏
  • 举报
回复
涉及到的代码如下:


class Program
{

static string inputstr = ""; //退出指令
/// <summary
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{

ThreadStart thr_start = new ThreadStart(first_Thread); //准备第一个线程
Console.WriteLine("Ready for start the first thread...");
Thread firstThread = new Thread(thr_start);
firstThread.Name = "first_thread";

ThreadStart thr_second = new ThreadStart(cmd_Thread); //准备第二个线程
Console.WriteLine("Ready for start the second thread...");
Thread cmdThread = new Thread(thr_second);
cmdThread.Name = "cmd_thread";

cmdThread.Start();
firstThread.Start();
}

/**
*主要是在命令行执行,将线程的主要工作及执行情况打印出来
*/
public static void cmd_Thread()
{
Console.WriteLine(System.DateTime.Now.ToString() + " Task running... Until input 'EXIT'");

while (!string.IsNullOrEmpty(inputstr) && inputstr.ToUpper() != "EXIT") //如果只有后面一段判断表达式则会抛NullReferenceException
{
inputstr = Console.ReadLine();
}

}

/**
*调用接口程序做到同步数据
*/
public static void first_Thread()

{
Console.WriteLine("开始执行。。。。");

while (inputstr == "" && inputstr.ToUpper() != "EXIT" && string.IsNullOrEmpty(inputstr))
{
//执行任务
}

Console.WriteLine("程序退出,谢谢使用。。。");

Thread.Sleep(2000);
}


}




满衣兄 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hulifang333 的回复:]
string str = "";
这条语句不初始化这个字符串?
[/Quote]
An unhandled exception of type 'System.NullReferenceException' occurred in WindowsApplication7.exe
如果是null就报这个错误.你肯定是在某个地方把str=null了.在好好检查一下.
这个问题调试一下就可以了.
plusium 2009-06-29
  • 打赏
  • 举报
回复
string str = ""; 是初始化。

你在抛异常的地方打个断点,看str是不是null不就知道了。
是null的话,那就表示从初始化到.ToUpper()之间发生了一些事情。

不知道的话建议把源代码贴上来,以你3天的C#经验,应该是个小错误。
michaeljjf 2009-06-29
  • 打赏
  • 举报
回复
可以把你的代码发全,这样我们就知道你有没有给str赋值了

-------------------------------------
分享网络资讯 www.yeahbeta.com
有空来踩踩
hulifang333 2009-06-29
  • 打赏
  • 举报
回复
string str = "";
这条语句不初始化这个字符串?
满衣兄 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hulifang333 的回复:]
初始化后并没有“str=null;”
哎,跟JAVA不一样么?
[/Quote]
如果不初始化就是null
hulifang333 2009-06-29
  • 打赏
  • 举报
回复
初始化后并没有“str=null;”
哎,跟JAVA不一样么?
zhubo_1117 2009-06-29
  • 打赏
  • 举报
回复
str是null的
windinwing 2009-06-29
  • 打赏
  • 举报
回复
你后面有附值操作吧?

string str = ""
str=null;
if(str.ToUpper() != "EX")

比如这样,100%的出那个精典的未将对像设值到对像的引用
hulifang333 2009-06-29
  • 打赏
  • 举报
回复
谢谢,按照您的写法问题已解决,可是为什么得判断是否为null呢?难得c#里null和空字符串是相同的?
pt1314917 2009-06-29
  • 打赏
  • 举报
回复

if(!string.IsNullOrEmpty(str) && str.ToUpper() != "EX")

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧