2012-03-20 32 views
-1

对字符串clientNameStr使用“替换”导致“未找到对象引用”错误。C#替换导致未找到对象引用错误

// Get client name 
clientName = currentUser.GetValue("ClientName"); 
string clientNameStr = (string)clientName; 
string clientURLStr = string.Empty; 
clientURLStr = clientNameStr.Replace(' ', '-'); 
// clientURLStr = "ST9215-Stanic-Parts-Ltd"; 

如果我在注释掉字符串替换(并注释掉现有的),它工作正常,所以它必须是与替换功能,但什么?有两种“和”引号试了一下,相同的结果。

任何帮助,将不胜感激。

谢谢,奥利。

+1

确定'currentUser.GetValue( “CLIENTNAME”)'是不是返回null? – Rawling 2012-03-20 11:59:03

+0

[在.NET中是什么是NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) – 2012-03-20 12:00:02

+0

使用调试器进行调试 – 2012-03-20 12:14:28

回答

5

,基本上表明currentUser.GetValue("ClientName")返回一个空引用。 我们分不清什么currentUser.GetValue("ClientName")的做法,但也有两个操作蒸发散:

  • 这是正确返回null,你应该处理
  • 不应返回NULL,你需要修复它(可能如果遇到这种情况时抛出一个异常)

这是可能,它的返回一个非空REF并在下一行返回空值时使用用户定义的转换字符串 - 但不太可能。我们无法确定,因为我们不知道clientName的类型。

+0

嗯......它不应该返回null。在这个具体情况下,它应该返回“ST9215 Stanic Parts Ltd”。我会研究一下。 – BFWebAdmin 2012-03-20 12:01:23

+0

@OliJeffery:你可以调试它,或添加日志记录?我相信你会发现它是空的 - 接下来的问题是为什么... – 2012-03-20 12:10:14

3

大概CLIENTNAME(因此clientNameStr)为空。您不能调用空对象的方法,即使你知道它应该是一个字符串。

0

currentUser.GetValue(“ClientName”)可能返回null,从而在尝试执行Replace时引发错误。

更好的编码将

clientName = currentUser.GetValue("ClientName"); 
string clientNameStr = clientName ?? ""; 
string clientURLStr = clientNameStr.Replace(' ', '-'); 
+1

这只是“更好的编码”,如果它是*合法的*因为它返回null *并且*结果应该与返回空字符串相同。我期望很有可能它应该总是返回一个非空的引用或抛出一个异常,或者如果它*可以*返回null,那么调用代码应该沿着一条完全不同的路径走。 – 2012-03-20 12:11:01

+0

@JonSkeet真的。但是,再次,我们唯一拥有的是问题的代码,其余的我们只是“假设”... – 2012-03-20 12:14:07

+0

是的 - 对不起,它应该总是返回一个值。您的代码会停止该错误,但不会生成正确的响应 - 即clientURLStr最终为空。 – BFWebAdmin 2012-03-20 12:16:07

相关问题