c# - 需要 for 循环而不是嵌套的 if 语句
问题描述
我正在构建一个具有聊天组件的网站。下面的代码从存储过程接收具有许多不同参数的消息列表。其中之一是如果一条消息正在回复另一条消息,如果是这种情况,请将正在回复的消息复制到消息答案上。如果正在回复的消息也是对先前消息的回答,请执行相同的操作。现在我的问题是,我无法弄清楚如何在不将 if 相互嵌套的情况下自动化这部分代码,直到我希望用户不再在同一个链中回复。
- 换个说法,我以相反的顺序进入一个列表并检查 ReplyingTo 是否不为空。
- 然后我复制具有相同 ID 的行,并且 ReplyingTo 比当前行高 1 行。
- 然后我确认这个新行有一个 ReplyingTo
- 如果是这样,我将该对象复制到比当前对象高 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))
}
}
}
推荐阅读
- angular - 支持多种日期格式的 Angular 日期选择器
- apache-spark - 读取或写入 Parquet 格式数据时出错
- node.js - 将 TypeScript 与 Express 和静态文件一起使用
- python - 如何在烧瓶应用程序中管理多个相似的应用程序路由?
- python - pd.read_csv 显示索引和列名但没有值
- sql - 将 azure sql 数据库还原到托管实例
- reactjs - 如何删除在反应上下文警告之外调用的computedFn
- c++ - 关于用括号括起来的声明类型是什么的问题
- java - 如何根据偏航,俯仰和滚动值旋转处理中的对象
- ios - 安装了 FB 应用程序的 SwiftUI 自定义 Facebook 登录