Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 所需的for循环,而不是嵌套的if语句_C#_Loops_If Statement - Fatal编程技术网

C# 所需的for循环,而不是嵌套的if语句

C# 所需的for循环,而不是嵌套的if语句,c#,loops,if-statement,C#,Loops,If Statement,我正在建立一个网站,它确实有一个聊天组件。下面的代码从存储过程接收具有许多不同参数的消息列表。其中1个是如果一条消息正在回复另一条消息,如果是这种情况,则在消息应答上复制正在回复的消息。如果被回复的消息也是对前一条消息的回复,请执行相同的ect。现在我的问题是,我一直无法找出如何在不嵌套if的情况下自动化这部分代码,直到我希望用户不再在同一个链中回复为止 换言之,我以相反的顺序进入一个列表,检查ReplyingTo是否为null 然后,我复制具有相同ID的行,并回复到比当前行高出1行的行 然后

我正在建立一个网站,它确实有一个聊天组件。下面的代码从存储过程接收具有许多不同参数的消息列表。其中1个是如果一条消息正在回复另一条消息,如果是这种情况,则在消息应答上复制正在回复的消息。如果被回复的消息也是对前一条消息的回复,请执行相同的ect。现在我的问题是,我一直无法找出如何在不嵌套if的情况下自动化这部分代码,直到我希望用户不再在同一个链中回复为止

  • 换言之,我以相反的顺序进入一个列表,检查ReplyingTo是否为null
  • 然后,我复制具有相同ID的行,并回复到比当前行高出1行的行
  • 然后我确认这一行有一个replingto
  • 如果是,我将该对象复制到比当前对象高2行的位置
  • 我会继续这样做,直到达到用户无法达到的某个点
如果有人知道如何进行,我将非常感激。我在下面举了一个数据类型的例子,它将被赋予这个函数

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

如果我正确理解您的意思,也许运行类似这样的操作以递归方式获取所有回复会起作用:

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

您必须使用递归方法来执行此操作。先试试你的运气。还有:你为什么要这样做?看起来你的设计有点不对劲。publicChatCountList用于什么?publicChatCountList是我根据代码下表创建的列表,将检查递归方法,谢谢