2015-06-23 1 views
0

Я пробую эту инструкцию, чтобы проверить, не является ли SSN пустым, возвращает значение в SSNstr, иначе возвращает null. Но это возвращает мне ошибку Object reference not set to an instance of an object., когда SSN пуст.Возврат null в случае пустого объекта в C#

Model.DocumentData dt = new Model.DocumentData();  
dt.SSNstr = (dt.SSNstr == null ? null :(string)individual.XPathSelectElement("Individual/SSN")).Insert(5,"-").Insert(3,"-"); 

это дт класс:

 [DataMember] 
     public string SSNstr = string.Empty; 

пожалуйста внимание здесь я знаю, как проверить нулевое значение, но я хотел бы сделать это в одной строке кода. Поскольку у меня так много полей, как это, что мне нужно проверить, я предпочитаю проверять 1 строку кода или что-то менять в классе dt, который позаботится об этом.

+0

либо dt, либо индивидуально - это их нулевая проверка. как dt! = null && dt.SSNstr == null ... что-то вроде этого –

+1

Кроме того, 'XPathSelectElement' cound должен возвращать' null' (вызывая приведение в цепочку 'Insert' для исключения). – crashmstr

+0

Если это 'null', вы не можете сделать' Insert' на нем. – juharr

ответ

7

Null и "empty string" - это две разные вещи. Сделайте свой чек с помощью String.IsNullOrEmpty или String.IsNullOrWhiteSpace.

В конце этого результата ваш запрос XPath может быть пустым. Почему бы вам не разбить это на несколько строк?

Приложение: Это действительно выглядит так, как ваш результат запроса XPath пуст. Вы работаете над тем, что он не будет пустым. У вас есть эта уверенность? Когда вы программируете, не доверяйте никому. Включая себя.

+0

Спасибо, потому что слишком много полей, таких как 50, я хотел сделать каждый в 1 строке, чтобы сделать его меньше кода и чище. Si, я могу проверить все в этой строке? – Alma

+1

@Alma, позвольте мне сказать так: будь то одно поле или 500, вы не экономите время, если ваше выражение стоит на одной строке, но слишком сложно отлаживать. Визуально, это немного запутанно. – MPelletier

+3

Если «меньшее количество строк = чистый код» было истинным, мы все отправляем серьезные вопросы по codegolf.SE –

1

dt может быть пустым в этом случае. Я бы проверял, действительно ли этот объект имеет значение. Вам необходимо создать экземпляр dt, после чего вы можете установить значение dt.SSNstr.

+1

Я создаю экземпляр dt как Model.DocumentData dt = new Model.DocumentData(); и ssn как [DataMember] public string SSNstr = string.Empty; – Alma

1

За ваши изменения, вы можете просто сделать, как

dt.SSNstr = ((individual.XPathSelectElement("Individual/SSN") as string) == null) ? null : (individual.XPathSelectElement("Individual/SSN") as string).Insert(5,"-").Insert(3,"-"); 
+0

Это дает мне синтаксическую ошибку. – Alma

+0

@Alma, это из-за дополнительной скобки '('. Отредактировал ответ, теперь должно быть хорошо. – Rahul

2

Проверьте круглые скобки.

Если dt.SSNstr является null, выражение не возвращает null, она возвращается (null).Insert(5,"-").Insert(3,"-"), который вызывает ошибку. Вы не можете вставить ничего в null.

Одно решение было бы написать

dt.SSNstr = dt.SSNstr == null ? null :(string)individual.XPathSelectElement("Individual/SSN").Insert(5,"-").Insert(3,"-"); 

но если бы лучше иметь

if (dt.SSNstr!=null) 
    dt.SSNstr =(string)individual.XPathSelectElement("Individual/SSN").Insert(5,"-").Insert(3,"-"); 

в противном случае вы присваиваете нулевой переменной, которая уже пустой.

Редактировать: Как говорят другие ответы, вы должны проверить на IsNullOrEmpty, а не только на null. Вы начинаете с string.Empty, но позже вы назначаете null.

+0

Я пробовал использовать другой способ размещения круглых скобок, но он создает ошибку. Можете ли вы сказать, что мне следует изменить? – Alma

+0

Удалите первый ' и второй ')'). Я отредактирую ответ. –

1

var test = "";

var a = string.IsNullOrEmpty (test)? null: test;

Надеюсь, это поможет.

+0

'XPathSelectElement' возвращает' XElement', который не имеет метода 'Insert'. Вам нужно «.Value» перед первой «Insert». – juharr

+0

Вы правы, я скопировал его пример. Я перешел на простой пример. ТКС –

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