#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. Не удается преобразовать объект в модель Я обновил свой код