定义KeyValuePair结构,如<int,list <string>&gt;

时间:2015-06-26 05:14:25

标签: c# list key-value keyvaluepair

我正在开展一个在线论坛项目,我想对这篇文章添加一些评论。

在我的想象中,我可能需要创建一些像KeyValuePair <int,List<string>>这样的结构。每篇文章都有自己的titleNum,用于记录文章编号。

在我的程序中,它应该像

public void addcomment(int titleNum, string comment) 
{
    int title = 
    using Data = System.Collections.Generic.KeyValuePair<int, List<string>>
    List<string> a = new List<string>;
    a.add(comment)
    //then append List a to Data
}

public List<string> getComment (int inputTitleNum)
{
 //return string List which titleNum = inputTitleNum
}

但是,我现在不知道该怎么做。在最终结果中,它应该是这样的。 当我向inputTitleNum函数输入getComment时,它应返回commentList

4 个答案:

答案 0 :(得分:3)

如果我为此正确理解您的问题,您可以使用Dictionary<int, List<string>>

    Dictionary<int, List<string>> articles = new Dictionary<int, List<string>>();

    public void AddComment(int titleNum, string comment) 
    {
        if(!articles.Keys.Contains(titleNum)) articles.Add(titleNum, new List<string>());
        articles[titleNum].Add(comment);
    }

    public List<string> getComment (int titleNum)
    {
       return articles[titleNum];
    }

但您应该考虑使用Entity Framework,SQL数据库和Repository。之后,您可以使用“注释”和“文章”模型来处理数据库中的数据。您甚至可以创建和使用视图模型,例如CommentList,以便查看数据。

我们假设您的数据库中有Comment实体,如下所示:

public class Comment
{
    public long Id { get; set; }
    public string Title{ get; set; }
    public string Text { get; set; }
    public long ArticleId { get; set; }
}

实体文章是这样的:

public class Article
{
    public long Id{ get; set; }
    public string Header { get; set; }
    public string Text { get; set; }        
    public long AuthorId { get; set; }
}

现在,您可以向Repository类添加适用于该模型的方法:

public class Repository : IRepository
{
   .... 
   private MyDbContext _cont;

   public Comment getComment (int Id)
   {
       return _cont.Comments.FirstOrDefault(c => c.Id == Id);
   }

   public List<Comments> GetCommentsList(int articleId)
   {
       return _cont.Comments.Where(c => c.ArticleId == aricleId).ToList();
   }
}

在你的控制器中使用它:

    public ActionResult GetComments(long Id)
    {
        object model = List<Comment> comments = Repo.GetCommentsList(Id);
        return View(model);
    }

答案 1 :(得分:2)

关于您的方法本身,如果您有很多评论或想要形成关联,则应使用数据库。等与日期,用户相关联。它的检索速度更快等。考虑查找SQLite,它是一个存储为文本文件的数据库。

如果您对使用列表感到满意,那么这应该可行:

data

答案 2 :(得分:0)

首先,你所写的是无效的C#。它应该是这样的:
private KeyValuePair<int, List<string>> Data {get; set; }

然后你的addComment函数看起来像:

public void addComment(int titleNum, string comment) {
    if (!this.Data.ContainsKey(titleNum) {
        this.Data.Add(titleNum, new List<string>());
    }
    this.Data[titleNum].Add(comment);
}

和getComment:

public List<string> getComment(int titleNum) {
    return this.Data[titleNum];
}

根据KeyValuePair合约,您可以通过

检索它

答案 3 :(得分:0)

使用字典执行此操作不是最佳方法,尤其是在您决定使用数据库时。您应该在Article类中存储注释列表。

public class Article
{
    public int ArticleNum { get; set; }
    public string Creator { get; set; }
    public DateTime DateCreated { get; set; }
    public List<string> Comments { get; set; }
    public Article()
    {
        this.Comments = new List<string>();
    }

    public void AddComment(string comment)
    {
        this.Comments.Add(comment);
    }

    public void RemoveComment(string comment)
    {
        this.Comments.Remove(comment);
    }
}

您还可以删除注释的字符串列表并创建注释类并改为使用注释列表。

  

公共类文章       {           public int ArticleNum {get;组; }           public string Creator {get;组; }           public DateTime DateCreated {get;组; }           公共列表评论{get;组; }

    public Article()
    {
        this.Comments = new List<Comment>();
    }

    public void AddComment(Comment comment)
    {

        this.Comments.Add(comment);
    }

    public void RemoveComment(Comment comment)
    {
        this.Comments.Remove(comment);
    }
}
public class Comment
{
    public string Comment { get; set; }
    public string Creator { get; set; }
    public DateTime DateCreated { get; set; }
}