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