c#:自引用对象转换

c#: Self referencing object conversion

我有一个自引用对象,我需要将其从一个对象转换为另一个相似的对象。我无法找到合适的方法来进行递归转换而不导致无限循环。任何帮助都是 appreciated.Still 学习我在 c#

中的技巧

对象 1:

public class Comment
{
    public string User{ get; set; }
    public List<Comment> Replies { get; set; }
}

对象 2:

public class CommentRepo
{
    public string User{ get; set; }
    public ICollection<CommentRepo> Replies { get; set; }
}

我的对象设置如下:

  var comment = new Shared.Models.Comment
        {
            User = "Test User"
        };


        var reply1 = new Shared.Models.Comment
        {
            User = "Reply User 1"
        };

        var subreply1 = new Shared.Models.Comment
        {

            User = "Sub Reply User 1"
        };

        var sublist = new List<Shared.Models.Comment>() { subreply1 };

        reply1.Replies = sublist;

        var reply2 = new Shared.Models.Comment
        {
            User = "Reply User 2"
        };

        var listed = new List<Shared.Models.Comment>() {reply1, reply2};


        comment.Replies = listed;

转换方法:这是我运行失去动力的地方。

    public ICollection<CommentRepo> ToCommentRepo(IEnumerable<Shared.Models.Comment> comments)
    {
        if (comments == null) return null;

        var commentRepo = comments.Select(entity => new CommentRepo
        {
            User = entity.User,
            Replies = entity.Replies.Count > 0 ? ToCommentRepo(entity.Replies) : null,
        }).ToList();

        return commentRepo;
    }

如果我正确理解了user2368215的逻辑,原题中的代码应该不会死循环。但是,如果循环引用是可能的,则有一种简单的方法来检测和避免无限循环,方法是在 ToCommentRepo(...) 外部声明 Dictionary 并在每次创建新的 CommentRepo 对象时添加从 Comment 到 CommentRepo 到该字典的新映射.然后,在 ToCommentRepo(...) 方法的开头,只需检查映射是否已经存在并 return 它,而不是调用 LINQ 方法来创建新映射。