Игнорировать нулевой оператор, применять метод только к заполненным строкам - PullRequest
0 голосов
/ 20 июня 2011

Как игнорировать пустой оператор и применять метод для удаления специальных символов только к заполненным строкам.

Answer1 = RemoveSpecialChars(doc.SelectSingleNode("/Main/Answer[@answerid='1']").Attributes["keypress"].Value);                 
Answer2 = RemoveSpecialChars(doc.SelectSingleNode("/Main/Answer[@answerid='2']").Attributes["keypress"].Value);

 public string RemoveSpecialChars(string input)
       {

           return Regex.Replace(input, @"[^0-9a-zA-Z\._]", string.Empty);
       }

Что происходит, когда пользователь нажимает и отправляет ответ один,и ничего за ответ два я получаю исключение, потому что метод пытается запустить пустую строку.Как лучше всего передать ответ1, если ответ 2 пуст?

1 Ответ

2 голосов
/ 20 июня 2011

Похоже, ваша проблема не в методе RemoveSpecialChars, а в возвращаемом значении SelectSingleNode (которое может быть null) или атрибуте Attributes["keypress"] (которое также может быть null) .

Любое из вышеперечисленного приведет к NullReferenceException. Вот переписанный код для защиты от первого, который, вероятно, вызывает проблему:

var node1 = doc.SelectSingleNode("/Main/Answer[@answerid='1']");
var node2 = doc.SelectSingleNode("/Main/Answer[@answerid='2']");

Answer1 = node1 == null ? null : RemoveSpecialChars(node1.Attributes["keypress"].Value);
Answer2 = node2 == null ? null : RemoveSpecialChars(node2.Attributes["keypress"].Value);

Обновление

Для защиты от нулевого атрибута keypress, вы должны сделать

Answer1 = node1 == null || node1.Attributes["keypress"] == null
            ? null 
            : RemoveSpecialChars(node1.Attributes["keypress"].Value);

и то же самое для Answer2.

...