2012-03-20 2 views
-1

с использованием «Заменить» в строке clientNameStr вызывает ошибку «Ссылка на объект не найдена».C# Replace вызывает ошибку ссылки на объект

// 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")' не возвращает нуль? – Rawling

+0

Возможный дубликат [Что такое исключение NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) –

+0

Пройти его с помощью отладчика –

ответ

5

это в основном показывает, что currentUser.GetValue("ClientName") возвращает ссылку на нулевой . Мы не можем сказать, что currentUser.GetValue("ClientName") делает, но есть два оп ли

  • Это правильно возвращение нулевого, и вы должны обращаться с этим
  • Это не должно возвращения нулевого, и вы должны это исправить (возможно исключение, если он сталкивается с этой ситуацией)

это возможного, что это возвращается ненулевой реф и использование пользовательского преобразования в строку в следующей строке, которая возвращает значение null - но маловероятно. Мы не можем точно сказать, потому что мы не знаем тип clientName.

+0

Хммммм ... он не должен возвращать null. В этом конкретном случае он должен вернуть «ST9215 Stanic Parts Ltd». Я займусь этим. – BFWebAdmin

+0

@OliJeffery: можете ли вы отладить в нем или добавить журнал? Я уверен, что вы найдете его нулевым - следующий вопрос - почему ... –

3

Вероятно CLIENTNAME (и, таким образом, clientNameStr) равна нулю. Вы не может вызывать методы нулевого объекта, даже если вы знаете, что это должно быть строкой.

0

Возможно, что currentUser.GetValue ("ClientName") возвращает значение null, тем самым вызывая ошибку при попытке выполнить замену.

Лучше кодирование будет

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

Это только «лучшее кодирование», если оно законно * для возврата null * и * результат должен быть таким же, как если бы он возвращал пустую строку. Я бы ожидал, что вполне возможно, что он всегда должен возвращать ненулевую ссылку или выдавать исключение, или что если он * может * вернуть значение null, то вызывающий код должен перейти по совсем другому пути. –

+0

@JonSkeet Так верно. Но опять же, единственное, что у нас есть, это код вопроса, а остальное мы просто «принимаем» ... –

+0

Да - извините, он всегда должен возвращать значение. Ваш код останавливает ошибку, но не генерирует правильный ответ, то есть clientURLStr заканчивается пустым. – BFWebAdmin

Смежные вопросы