Объявление локальной переменной неизвестного типа

#c# #variables #generics #local

#c# #переменные #общие положения #Местные новости

Вопрос:

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

У нее нет общего базового типа

 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);
  

Ответ №1:

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

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

 CommonBaseType result = null;
  

В вашем случае, похоже, так и есть NavigatorTopicTemplateXmlDTO , так что это было бы:

 NavigatorTopicTemplateXmlDTO result = null;
  

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

 object result = null;
  

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

1. Нет необходимости в = null , поскольку она определенно назначается оператором switch.

2. Я обновил MapFrrom нет, у него нет общего базового типа

3. Уверен, что это так, NavigatorTopicTemplateXmlDTO возвращается в обоих случаях? Если это так, то объявите переменную с этим типом: NavigatorTopicTemplateXmlDTO resu< .

4. @KarimAli, какой тип возвращаемого MapFrom метода NavigatorTopicTemplateXmlDTO класса?

Ответ №2:

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

 object resu<

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);
  

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

1. Не удается преобразовать объект в модель Я обновил свой код