将值添加到基于模型的List

时间:2016-07-14 16:01:44

标签: c# .net list generic-list

Backgournd

我目前正在尝试将一个值添加到模型列表中,但它似乎与我在JavaScript中的方式不同。

模型

public class ContentBase
{

    public string Name { get; set; }    
    public string Description { get; set; }
    public string LastModifiedTime { get; set; }
    public string KeyWords { get; set; }
    public string Content { get; set; }
    public string UniqueId { get; set; }
    public string library { get; set; }
    public string ContentSummary { get; set; }        
    public string[] images { get; set; }
}

添加价值的功能

 List<ContentBase> returnList = new List<ContentBase>();
 foreach (HtmlNode img in htmlDocument.DocumentNode.SelectNodes("//img"))
  {
    HtmlAttribute att = img.Attributes["src"];
    returnList.Add(images = att.Value);  << this is wrong, just trying to give an idea of my intentions
  }

问题

我正在尝试将HtmlAttribute att = img.Attributes["src"];的结果添加到我的列表的string[] images中。这样,一旦我完成这个迭代,我将能够获得我在列表的string[] images部分中为每个循环获取的所有值

更新

这是填充列表中其他项目的上述功能

string content = "";
if (includeContent == true)
{
    content = rslt[ContentBase.fastContent] != null ? rslt[ContentBase.fastContent].ToString() : "";
}

returnList.Add(new ContentBase()
{
    UniqueId = rslt[ContentBase.fasstUniqueId] != null ? rslt[ContentBase.fasstUniqueId].ToString() : "",
    LastModifiedTime = rslt[ContentBase.fasstLastModifiedTime] != null ? rslt[ContentBase.fasstLastModifiedTime].ToString().Substring(0, 8) : "",
    Name = rslt[ContentBase.fastName] != null ? rslt[ContentBase.fastName].ToString() : "",
    Description = rslt[ContentBase.fastDescription] != null ? rslt[ContentBase.fastDescription].ToString() : "",
    KeyWords = rslt[ContentBase.fastKeyWords] != null ? rslt[ContentBase.fastKeyWords].ToString() : "",
    ContentSummary = rslt[ContentBase.fasstContentSummary] != null ? rslt[ContentBase.fasstContentSummary].ToString() : "",
    Content = content,

});

4 个答案:

答案 0 :(得分:1)

此处returnListContentBase的列表,因此其项应该是相应类的对象。因此,向此添加项目的代码如下所示:

foreach (HtmlNode img in htmlDocument.DocumentNode.SelectNodes("//img"))
  {
    HtmlAttribute att = img.Attributes["src"];
    returnList.Add(new ContentBase(){library="some value",images = new string[]{att.value}}
  }

答案 1 :(得分:1)

您可以先创建一个ContentBase对象,然后添加它:

 List<ContentBase> returnList = new List<ContentBase>();
 foreach (HtmlNode img in htmlDocument.DocumentNode.SelectNodes("//img"))
  {
    HtmlAttribute att = img.Attributes["src"];
    ContentBase base = new ContentBase();
    base.image = att.value;
    returnList.Add(base);
  }

答案 2 :(得分:1)

您可以在不使用foreach循环的情况下使用Linq,如下所示:

List<ContentBase> returnList = htmlDocument.DocumentNode.SelectNodes("//img")
     .Select(img => new ContentBase {images = new[] {img.Attributes["src"].Value}}).ToList();

答案 3 :(得分:0)

returnListList<ContentBase>,因此您应该在列表中添加新的ContentBase

ContentBase对象包含string[] images属性,您可以在循环中创建或使用linq将其传递给创建的新ContentBase。您还应该提供已创建ContentBase的其他属性的值。例如:

var returnList = new List<ContentBase>();
returnList.Add(new ContentBase()
{
    // Initialize properties the same way you are setting them
    // Including the images property this way:
    images = htmlDocument.DocumentNode.SelectNodes("//img")
                         .Select(x=>x.Attributes["src"].Value).ToArray()
});