【问题标题】:Assign Value in List<T> when T model itself has List<T> as a property当 T 模型本身具有 List<T> 作为属性时,在 List<T> 中赋值
【发布时间】:2014-09-03 06:44:37
【问题描述】:

我需要编码帮助。我有 3 个类 SiteMapSection(保存 sectionUrl 和 SiteMapSubSection 列表)、SiteMapSubSection(保存 subSectionUrl 和 SiteMapArticle 列表)和 SiteMapArticle。这是类结构。

public class SiteMapSection
{
    public string sectionUrl { get; set; }
    public List<SiteMapSubSection> subSection { get; set; }
}

public class SiteMapSubSection
{
    public string subSectionUrl { get; set; }
    public List<SiteMapArticle> article { get; set; }
}

public class SiteMapArticle
{
    public string url { get; set; }
}

现在,我使用上面的类作为模型来分配值:

        var siteMapSection = new List<SiteMapSection>();
        DL.SectionArticle sa = new NewsFeed.BusinessTier.DataAccessLayer.SectionArticle();

        foreach (BE.Section section in BL.Sections.Find(websiteId, parentSectionId))
        {
            int sectionId = section.Id;
            siteMapSection.Add(new SiteMapSection { sectionUrl = BL.Sections.VirtualPath(section) + ".aspx" });

            Debug.WriteLine(siteMapSection[0].sectionUrl);

            foreach (BE.Section subsection in BL.Sections.Find(websiteId, sectionId))
            {
                int subSectionId = subsection.Id;
                var smss = new List<SiteMapSubSection>();
                smss.Add(new SiteMapSubSection { subSectionUrl = BL.Sections.VirtualPath(subsection) + ".aspx" });

                Debug.WriteLine(smss[0].subSectionUrl);

                var articles = sa.GetArticlesForSection(websiteId, subSectionId, 10);
                foreach (var article in articles)
                {
                    var sma = new List<SiteMapArticle>();
                    sma.Add(new SiteMapArticle { url = BL.Sections.VirtualPath(subsection) + "/" + article.Code + "-" + UrlEncoding.ArticleEncode(article.Headline) + ".aspx" });

                    Debug.WriteLine(sma[0].url);
                }
            }
        }

上面的代码只有 Debug.WriteLine() 的输出才能很好地工作。但是,当我将鼠标悬停在“var siteMapSection”上时,它显示“sectionUrl”并且“subSection”为空。这是因为我在 foreach 中的单独变量中添加了值。如何修改代码以使其进入(当我将鼠标悬停在 var siteMapSection 上时)类似于:

    siteMapSection
      [0]sectionUrl = "abc.com"
         subSection
         [0]subSectionUrl = "ced.com"
            [0]url = "zya.com"
            [1]url = "sd.com"
            [2]url = "ab.in"
            ::::::::::::::::
         [1]subSectionUrl = "abd.org"
            [0]url = "yy.in"
            ::::::::::::::::
         :::::::::::::::::::
      [1]sectionUrl = "yep.com"
         subSection
         [0]subSectionUrl = "ced.com"
            [0]url = "zya.com"
            [1]url = "sd.com"
            [2]url = "ab.in"
            ::::::::::::::::
         [1]subSectionUrl = "abd.org"
            [0]url = "yy.in"
            ::::::::::::::::
         :::::::::::::::::::
    :::::::::::::::::::::::::::

请帮助我。提前致谢。

【问题讨论】:

    标签: c# list class


    【解决方案1】:

    初始化变量sectionsubsection中的集合,直接添加进去。

                var siteMapSection = new List<SiteMapSection>();
                DL.SectionArticle sa = new NewsFeed.BusinessTier.DataAccessLayer.SectionArticle();
    
                foreach (BE.Section section in BL.Sections.Find(websiteId, parentSectionId))
                {
                    int sectionId = section.Id;
                    var mySection = new SiteMapSection();
                    mySection.sectionUrl = BL.Sections.VirtualPath(section) + ".aspx";
                    mySection.subSection = new List<SiteMapSubSection>();
    
                    siteMapSection.Add(mySection);// NOTICE CHANGE HERE
    
                    //Debug.WriteLine(siteMapSection[0].sectionUrl);
    
                    foreach (BE.Section subsection in BL.Sections.Find(websiteId, sectionId))
                    {
                        int subSectionId = subsection.Id;
    
                        var mySubSection = new SiteMapSubSection();
                        mySubSection.subSectionUrl = BL.Sections.VirtualPath(subsection) + ".aspx";
                        mySubSection.article = new List<SiteMapArticle>();
    enter code here
                        mySection.subSection.Add(mySubSection);// NOTICE CHANGE HERE
    
                        //Debug.WriteLine(smss[0].subSectionUrl);
    
                        var articles = sa.GetArticlesForSection(websiteId, subSectionId, 10);
                        foreach (var article in articles)
                        {
    
                            mySubSection.article.Add(new SiteMapArticle { url = BL.Sections.VirtualPath(subsection) + "/" + article.Code + "-" + UrlEncoding.ArticleEncode(article.Headline) + ".aspx" });// NOTICE CHANGE HERE
    
                            //Debug.WriteLine(sma[0].url);
                        }
                    }
                }
    

    【讨论】:

    • 子部分,未找到文章。我是否需要在 foreach 开始之前像这样声明它们 var subSection = new List() 和 var article = new List() ?试过了,还是找不到显示。
    【解决方案2】:

    试试这个:

    var siteMapSection = new List<SiteMapSection>();
            DL.SectionArticle sa = new NewsFeed.BusinessTier.DataAccessLayer.SectionArticle();
    
            foreach (BE.Section section in BL.Sections.Find(websiteId, parentSectionId))
            {
                int sectionId = section.Id;
                var siteMap=new SiteMapSection { sectionUrl = BL.Sections.VirtualPath(section) + ".aspx" };
    
    
                Debug.WriteLine(siteMap.sectionUrl);
            var smss = new List<SiteMapSubSection>();
                foreach (BE.Section subsection in BL.Sections.Find(websiteId, sectionId))
                {
                    int subSectionId = subsection.Id;
                    var sms=new SiteMapSubSection { subSectionUrl = BL.Sections.VirtualPath(subsection) + ".aspx" };
            Debug.WriteLine(smss[0].subSectionUrl);                
    
    
    
            var sma = new List<SiteMapArticle>();
                    var articles = sa.GetArticlesForSection(websiteId, subSectionId, 10);
                    foreach (var article in articles)
                    {
                        var sm= new SiteMapArticle { url = BL.Sections.VirtualPath(subsection) + "/" + article.Code + "-" +             UrlEncoding.ArticleEncode(article.Headline) + ".aspx" };  
                        sma.Add(sm);
    
                        Debug.WriteLine(sm.url);
                    }
            sms.article=sma;
            smss.Add(sms);
                }
            siteMap.subSection=smss;
            siteMapSection.Add(siteMap);
            }
    

    【讨论】:

    • 太好了。我看到了部分、子部分的列表,但没有看到完全缺失的文章。
    • 我们正在为每个 SiteMapSubSection 设置文章属性。 sms.article=sma;确保文章不为空
    【解决方案3】:

    在构造函数中初始化 subSection

    public class SiteMapSection
    {
       public string sectionUrl { get; set; }
       public List<SiteMapSubSection> subSection { get; set; }
       public SiteMapSection()
       {
            subSection    =new List<SiteMapSubSection>();
       }
    
     }
    

    【讨论】:

    • @AbhimanyuKumarVatsa subSection 为 0,因为 List 为空。这是一个新对象,没有 subSections
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多