запрос linq и нули

#c# #xml #linq

#c# #xml #linq

Вопрос:

Я хотел бы запросить с помощью linq некоторый XML-файл. Есть некоторые обязательные и некоторые необязательные элементы. Требуется только имя — все остальное необязательно. Если есть какой-то NULL, например cageCode = NULL — он ничего не выбирает — мне нужно добавить в список строк — «» — Я пробовал это, как показано ниже, но это не работает. Когда я все заполнил, все работает нормально, когда есть что-то NULL, оно ничего не сохраняет для перечисления. Не могли бы вы помочь мне, как установить «» в список, где находится нулевой элемент? Спасибо!

 var queryManufacturer = from dataManufaturer in input.Identification.Manufacturers.Manufacturer
                                                select
                                                new
                                                { 
                                                    dataManufaturer.name,
                                                    dataManufaturer.cageCode,
                                                    dataManufaturer.FaxNumber,
                                                    dataManufaturer.URL.OriginalString
                                                };

                foreach (var a in queryManufacturer)
                {
                    data.Add(a.name);
                    if (a.cageCode == null) data.Add("");
                    else data.Add(a.cageCode);
                    if (a.FaxNumber == null) data.Add("");
                    else data.Add(a.FaxNumber);
                    if (a.OriginalString == null) data.Add("");
                    else data.Add(a.OriginalString);
                }
  

Он выдает мне исключение null, если некоторые элементы в xml-файле отсутствуют — я не хочу получать это исключение — я бы хотел просто добавить пустую строку рядом с отсутствующим элементом

Комментарии:

1. Кроме того, вы можете использовать менее подробный data.Add( a.FaxNumer ?? "") вместо всех этих if / else. Найдите оператор объединения null.

Ответ №1:

попробуйте это в вашем запросе Linq to XML:

 select new
{ 
  name = dataManufaturer.name ?? "",
  cageCode = dataManufaturer.cageCode ?? "",
  FaxNumber  = dataManufaturer.FaxNumber  ?? "",
  OriginalString = dataManufaturer.URL!=null ?  dataManufaturer.URL.OriginalString : ""
};
  

Комментарии:

1. @the_drow: Ну, я бы использовал String . Также пусто чисто по соглашению, но они указывают на тот же самый экземпляр empty string, который "" интернирован. Функциональной разницы нет, поэтому мне интересно, почему вас это так волнует.

2. @EdS.: Просто соглашение о кодировании. Resharper также рекомендует это. Я бы никого не убил, если бы увидел, что он использует «» 🙂

3. @the_drow: Да, здесь то же самое. Если я работаю над проектом, в котором они используют «», я с радостью сделаю то же самое.

4. @the_drow: В дополнение к этому, в первые дни .NET была разница, потому что пустая строка не была интернирована, но этого не было в течение некоторого времени.

5. @EdS.: Что вы подразумеваете под не интернированным?