2016-07-20 3 views
0

Почему String.Trim() бросает исключение на string.empty, когда он используется в бритве посмотреть, как это:String.Trim() с точки зрения Razor

console.log('@Model.Test.FirstOrDefault().Trim()'); 

(список пуст, поэтому я получить string.empty), а затем:

Server Error in '/' Application. 
Object reference not set to an instance of an object. 
(...)' 
Line 326:   console.log('@Model.Test.FirstOrDefault().Trim()'); 
+0

Вы, вероятно, вызывая Обрезка на нулевой – Adil

+4

Скорее всего 'FirstOrDefault' сдающей' null', а не пустая строка. – npinti

+0

console.log ('результат:' + '@ Model.Institution.FirstOrDefault()'); дает мне: 'result:' в консоли – Carlos28

ответ

4

Если список пуст, как вы говорите, то вы не получите string.Empty но нуль, так как значение по умолчанию первого элемента пустого списка строк является null, и вы не можете позвонить .Trim() нанулевой объект.

Если вы используете C# 6, то вы могли бы сделать что-то вроде этого:

console.log('@Model.Test.FirstOrDefault()?.Trim()'); 

Примечания добавления знака вопроса перед .Trim(), что ставит нулевую отметку в, так что отделка будет называться только если левая сторона не равна нулю.

В качестве альтернативы вы можете сделать:

console.log('@(Model.Test.FirstOrDefault() ?? string.Empty).Trim()'); 

Что использует нулевой оператор коалесцирующий явно заменить нуль с string.Empty и доступен в предыдущих версиях C#

0

Вы, наверное, null где-то. Вы можете преодолеть это легко с помощью elvis оператора в C# 6:

console.log('@Model.Test?.FirstOrDefault()?.Trim()??"Null property"'); 
+0

Не злоупотребляйте?. оператор - это может привести к ошибкам. Используйте его только там, где вы знаете, что будет нулевое значение, с которым вы хотите иметь дело определенным образом. –

+0

Я не думаю, что это излишне. Строка понятна. Он хочет использовать значение строки для чего-то, и нужно проверить нулевое значение. Оператор Elvis должен пропустить много ненужного кода для нулевой проверки, когда нет нужды –

+0

Вы знаете, где возможен нулевой (после '.FirstOrDefault()'). В других местах, которые вы использовали, они не были идентифицированы как где возвращаемое значение является нулевым, или что это полезно, потому что вы заставили себя в этот угол - он не (или никогда не должен) возвращать null, вы не должны проверять его, поскольку вы будете скрывать ошибки. Ваш ответ и последующий комментарий точно показывают, почему я думал, что это дополнение к языку было плохими идеями. Вы злоупотребляете им, и вы не можете видеть, что вы есть. Все, что вы сделали, это воссоздать старый сценарий VB OnErrorContinue. –

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