Объявление локальной переменной неизвестного типа - PullRequest
1 голос
/ 15 марта 2019

Как бы я инициализировал мою локальную переменную в этом сценарии? Есть ли лучший способ написать это?

Не имеет общего базового типа

var result = 

switch (template)
{
    case TopicXmlSerializationTemplate.Bloomberg:
        result = NavigatorTopicTemplateBloombergXmlDTO.MapFrom(topic, topicArticles);
        break;

    default:
        result = NavigatorTopicTemplateXmlDTO.MapFrom(topic, topicArticles);
        break;
}

var data = await xmlSerializationService.SerialiseXML(result, Encoding.UTF8);

public static NavigatorTopicTemplateXmlDTO MapFrom(NavigatorTopic topic, IEnumerable<NavigatorTopicArticle> articles)
{
    return new NavigatorTopicTemplateXmlDTO()
    {
        Name = topic.Title,
        ISSN = topic.ISSN,
        Editors = topic.ConsultingEditors.Select(e => EditorsDTO.MapFrom(e.AuthorName)).ToArray(),
        Articles = articles.Select(a => TopicArticlesDTO.MapFrom(a)).ToArray(),
        Jurisdictions = topic.Jurisdictions.Select(j => TopicJurisdictionsBloombergDTO.MapFrom(j, topic)).ToArray(),
    };
}

Task<string> SerialiseXML(T entity, Encoding encoding);

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Зависит от типа, возвращаемого .MapFrom(). У них есть общий базовый тип?

Если они это сделают, вы можете использовать:

CommonBaseType result = null;

В вашем случае это выглядит как NavigatorTopicTemplateXmlDTO, так что это будет:

NavigatorTopicTemplateXmlDTO result = null;

Если нет, вы можете использовать:

object result = null;
0 голосов
/ 15 марта 2019

Общая база в любом случае может быть установлена ​​на тип первого параметра подписи SerialiseXML, будь то object.Скажите, что это object, просто сделайте это:

object result;

switch (template)
{
  case TopicXmlSerializationTemplate.Bloomberg:
    result = NavigatorTopicTemplateBloombergXmlDTO.MapFrom(topic, topicArticles);
    break;

  default:
    result = NavigatorTopicTemplateXmlDTO.MapFrom(topic, topicArticles);
    break;
}

var data = await xmlSerializationService.SerialiseXML(result, Encoding.UTF8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...