定义一个 KeyValuePair 结构,例如 <int,List<string>>

Define a KeyValuePair struct like <int,List<string>>

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

在我的想象中,我可能需要创建一些类似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
}

但是,我现在不知道该怎么办。最后的结果,应该是这样的。 当我输入 inputTitleNumgetComment 函数时,它应该 return a commentList.

首先,您所写的 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 合同,您将通过

检索它

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

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

public class Article
{
    public Dictionary<int, List<string>> articleComments = new Dictionary<int, List<string>>();

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

    public List<string> GetComment(int titleNum)
    {
        if (articleComments.ContainsKey(titleNum)
        {
            return articleComments[titleNum];
        }
        return null;
    }
}

如果我为此目的正确理解你的问题,你可以使用 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 数据库和存储库。之后,您可以使用评论和文章模型来处理数据库中的数据。您甚至可以创建和使用视图模型(例如 CommentList)来查看您的数据。

假设您的数据库中有评论实体,如下所示:

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; }
}

现在您可以将方法添加到您的存储库 class 以使用该模型:

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);
    }

使用字典来执行此操作并不是最佳方法,尤其是当您决定使用数据库时。您应该在文章 class.

中存储评论列表
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);
    }
}

您也可以删除评论的字符串列表并创建评论 class 并改为使用评论列表。

public class Article { public int ArticleNum { get; set; } public string Creator { get; set; } public DateTime DateCreated { get; set; } public List Comments { get; set; }

    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; }
}