声明未知类型的局部变量

时间:2019-03-15 11:44:10

标签: c# variables generics local

如何在此场景中初始化局部变量? 有没有更好的方法来写这个?

它没有通用的基本类型

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 个答案:

答案 0 :(得分:2)

取决于.MapFrom()返回的类型。它们有共同的基本类型吗?

如果这样做,您可以使用:

CommonBaseType result = null;

在您的情况下,它似乎是NavigatorTopicTemplateXmlDTO,所以它将是:

NavigatorTopicTemplateXmlDTO result = null;

如果没有,则可以使用:

object result = null;

答案 1 :(得分:0)

在任何情况下,都可以将公共基数设置为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);
相关问题