Доступ к нулевому значению приводит к сбою приложения / C # - PullRequest
2 голосов
/ 02 октября 2019

Я просто зацикливаюсь и добавляю свои свойства к большой строке:

output.Append(property.GetValue(this).ToString()));

Когда приложение в этот момент разрывает свойство, оно представляет ProductNumber, равное string, значение этого равно Product объект, который имеет значение ProductNumber = null, поэтому я пробовал что-то вроде этого:

output.Append(property.GetValue(this)?.ToString()));

Но в любом случае он ломается ..

Как я могулучшить этот код, чтобы избежать взлома?

Спасибо

Приветствия

Ответы [ 2 ]

3 голосов
/ 02 октября 2019

Кажется, что output.Append жалуется на null значения. Здесь есть 2 возможных источников досадных null с:

  1. property.GetValue(this) возвращает null и, таким образом, ?. в ?.ToString() распространяется null
  2. ToString() само возвращает null (вряд ли, но все еще возможно)

Мы можем решить обе возможности с помощью оператора ??: давайте вернем пустострока независимо от источника null:

property.GetValue(this)?.ToString() ?? ""

Окончательный код

output.Append(property.GetValue(this)?.ToString() ?? "");
2 голосов
/ 02 октября 2019

Этот код:

output.Append(property.GetValue(this)?.ToString()));

То же, что и:

object propValue = property.GetValue(this);
string propString = null;

if (propValue != null)
{
    propString = propValue.ToString();
}

output.Append(propString);  // propString can be null

Это может быть просто указано так:

string propString = property.GetValue(this)?.ToString();  // This performs a ToString if property.GetValue() is not null, otherwise propString will be null as well

output.Append(propValue);  // propValue can be null

Если вы хотите предотвратитьВызов Append с нулевым значением, которое вы можете сделать:

string propString = property.GetValue(this)?.ToString();  // This performs a ToString if property.GetValue() is not null, otherwise propString will be null as well

if (propString == null)
{
    propString = string.Empty;
}

output.Append(propValue);  // propString is not null

Это можно упростить с помощью оператора нуль-слияния :

string propString = property.GetValue(this)?.ToString() ?? string.Empty

output.Append(propValue);  // propString is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...