首页 > 解决方案 > 需要 for 循环而不是嵌套的 if 语句

问题描述

我正在构建一个具有聊天组件的网站。下面的代码从存储过程接收具有许多不同参数的消息列表。其中之一是如果一条消息正在回复另一条消息,如果是这种情况,请将正在回复的消息复制到消息答案上。如果正在回复的消息也是对先前消息的回答,请执行相同的操作。现在我的问题是,我无法弄清楚如何在不将 if 相互嵌套的情况下自动化这部分代码,直到我希望用户不再在同一个链中回复。

如果有人对如何进行有任何想法,我会非常亲切。我在下面给出了一个将提供给这个函数的数据类型的例子。

             for (int i = publicChatCountList.Count-1 ; i > -1; i--)
                {
                    if (publicChatCountList[i].ReplyingTo.HasValue)
                    {
                        Chat_Dto chatItem = new Chat_Dto();
                        long? ReplyingToId = publicChatCountList[i].ReplyingTo;
                        chatItem = publicChatCountList.Find(x => x.Id == ReplyingToId);
                        publicChatCountList.Insert(i+1, new Chat_Dto() {Text = chatItem.Text, IsPublic = chatItem.IsPublic, IsApproved = chatItem.IsApproved, ReplyingTo = chatItem.ReplyingTo });
                        publicChatCountList[i+1].Duplicate = true;

                        if (chatItem.ReplyingTo.HasValue)
                        {
                            Chat_Dto chatItem2 = new Chat_Dto();
                            long? ReplyingToId2 = chatItem.ReplyingTo;
                            chatItem2 = publicChatCountList.Find(x => x.Id == ReplyingToId2);
                            publicChatCountList.Insert(i + 2, new Chat_Dto() { Text = chatItem2.Text, IsPublic = chatItem2.IsPublic, IsApproved = chatItem2.IsApproved, ReplyingTo = chatItem2.ReplyingTo });
                            publicChatCountList[i + 2].Duplicate = true;
                        }
                    }
                }

在此处输入图像描述

标签: c#loopsif-statement

解决方案


如果我理解正确,也许运行这样的东西来递归地获取所有回复会起作用:

 private void Replies(Chat_Dto_List publicChatCountList,int i)
            {
                if (publicChatCountList[i].ReplyingTo.HasValue)
                {
                    Chat_Dto chatItem = new Chat_Dto();
                    long? ReplyingToId = publicChatCountList[i].ReplyingTo;
                    chatItem = publicChatCountList.Find(x => x.Id == ReplyingToId);
                    publicChatCountList.Insert(i + 1, new Chat_Dto() { Text = chatItem.Text, IsPublic = chatItem.IsPublic, IsApproved = chatItem.IsApproved, ReplyingTo = chatItem.ReplyingTo });
                    publicChatCountList[i + 1].Duplicate = true;
                    if (chatItem.ReplyingTo.HasValue)
                    {
                        Replies(publicChatCountList, publicChatCountList.FindIndex(x => x.Id == chatItem.ReplyingTo))
                    }
                    
                }
            }

推荐阅读