Daeamon
@Daeamon

Как сократить конструктор дочернего класса, дабы установить все параметры родительского объекта в дочерний?

Здравствуйте, возможно ли записать как то парой строк конструктор класса ArticleForSearch(Article doc), что бы не надо было его каждый раз дополнять?)
Задача состояла в том что бы все родительские параметры содержащие данные занести в новосозданный объект.
namespace Proved.Models
{
    public class ArticleForSearch:Article
    {

        public ArticleForSearch()
        {

        }
        public ArticleForSearch(Article doc)
        {
            if (!String.IsNullOrEmpty(doc.Title)) Title = doc.Title;
            if (!String.IsNullOrEmpty(doc.Alias)) Alias = doc.Alias;
            if (!String.IsNullOrEmpty(doc.Lead)) Alias = doc.Lead;
            if (!String.IsNullOrEmpty(doc.Content)) Content = doc.Content;
            if (!String.IsNullOrEmpty(doc.Image)) Image = doc.Image;
            if (!String.IsNullOrEmpty(doc.MetaTitle)) MetaTitle = doc.MetaTitle;
            if (!String.IsNullOrEmpty(doc.MetaDescription)) MetaDescription = doc.MetaDescription;
            if (!String.IsNullOrEmpty(doc.MetaKey)) Robots = doc.MetaKey;
            if (!String.IsNullOrEmpty(doc.Robots)) Robots = doc.Robots;

            ID = doc.ID;
            State = doc.State;
            Category = doc.Category;
            Created = doc.Created;
            AuthorID = doc.AuthorID;
            AuthorPseudo = doc.AuthorPseudo;
            YandexGenre = doc.YandexGenre;
            GoogleGenre = doc.GoogleGenre;
            MaterialType = doc.MaterialType;
            ArticleThemeID = doc.ArticleThemeID;
            Featured = doc.Featured;
            ShowImage = doc.ShowImage;
            Hits = doc.Hits;

            if (AuthorID == 0)
            {
                AuthorID = BaseController.UserId;
            }
            if(AuthorPseudo > 0)
            {
                if(MvcApplication.AuthorsPseudo.Where(o => o.ID == AuthorPseudo).FirstOrDefault() == null) AuthorID = BaseController.UserId;
                ArticleAuthorName = MvcApplication.AuthorsPseudo.Where(o => o.ID == AuthorPseudo).FirstOrDefault().FullName;
            }
            else
            {
                if (MvcApplication.AuthorsPseudo.Where(o => o.ID == AuthorPseudo).FirstOrDefault() == null) AuthorID = BaseController.UserId;
                ArticleAuthorName = MvcApplication.Authors.Where(o => o.UserId == AuthorID).FirstOrDefault().FullName;
            }
            ArticleCategoryName = MvcApplication.AllCategories.Where(o => o.ID == Category).FirstOrDefault().Name;
        }

        public string ArticleThemeName { get; set; }
        public string ArticleCategoryName { get; set; }
        public string ArticleAuthorName { get; set; }
        public List<Tag> Tags { get; set; }
    }
}
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
Попробуйте автомаппер, мне если честно вообще не нравится этот код. Я бы не делал такой конструктор ИМХО. Лучше какой-то маппер/конвертер в отдельном классе. А можно вообще не наследоваться, просто добавьте св-во типа Article. И вокруг него уже пляшите. Зависит от контекста того, что вы делаете.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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