Выбор поля имени автора из Atom-ленты с помощью LINQ (C#)

Ваша структура заставляет reportData иметь тип IReportItem, который является: IReportItemRegions или IReportItemFactionStatus, потому что это элемент массива report.

Вы хотите отобразить свойство regions, которое реализовано только в интерфейсе IReportItemRegions. Мы не знаем, относится ли reportData к типу IReportItemRegions. Прежде чем пытаться получить доступ к свойству, вы должны убедиться, что ваш объект реализует свойство:

if ('regions' in reportData) {
  console.log(reportData.regions)
}

Если вы хотите, чтобы TypeScript выводил тип, вы должны избавиться от find и переписать свой код. Я пришел с простой реализацией:

let reportData: IReportItemRegions;
let i = 0;
while (!reportData && report.length < i) {
  const currentReportData = report[i];
  if (currentReportData.type === 'REGIONS') {
    // Typescrit knows currentReportData is of type IReportItemRegions
    reportData = currentReportData;
  }
  i++;
}

if (!reportData) {
  return [];
}
console.log(reportData.regions);
5
задан Dan Lowe 6 May 2017 в 14:45
поделиться

2 ответа

Вы в основном хотите:

entry.Element(xmlns + "author").Element(xmlns + "name").Value

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

Канал мог бы также иметь элемент автора... просто другая вещь принять во внимание.

5
ответ дан 14 December 2019 в 04:50
поделиться

Это могло быть что-то вроде этого:

        var story = from entry in stories.Descendants(xmlns + "entry")
                    from a in entry.Descendants(xmlns + "author")
                    select new Story
                    {
                        Title = entry.Element(xmlns + "title").Value,
                        Content = entry.Element(xmlns + "subtitle").Value,
                        Author = new AuthorInfo(
                            a.Element(xmlns + "name").Value,
                            a.Element(xmlns + "email").Value,
                            a.Element(xmlns + "uri").Value
                         )
                    };
3
ответ дан 14 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: