奇怪的IF条件,不知道哪里出错了

一转程序员 2014-10-16 10:16:47
if (file[i].Contains(data1.Rows[k].Cells[3].Value.ToString()) && data1.Rows[k].Cells[3].Value.ToString() != comboBox2.Text )
{
file[i] = file[i].Replace(data1.Rows[k].Cells[3].Value.ToString(), comboBox2.Text);
}

其中的file[i]是从文本文件中取到的一行,这个message出来看过,没问题
这是想实现:如果这一行文本中包含datagridview1中对应行列中的字条串,并且这个字条串跟combox2中的文本不相同,那么就用combox2中的文本替换掉这个字符串
可是现在的结果是无论是否包含datagridview1中对应行列中的字条串都会运行{}中的语句,但是这条语句结果也不对,没有替换掉

没弄明白这两个问题出在哪里,求大侠指教
...全文
302 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
一转程序员 2014-11-12
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
还有,Replace之前,根本没必要判断是否包含 反正不包含,也不会有字符串被替换掉
你没仔细看……这不是单纯的replace,是要满足三个包含或不包含条件才去replace
  • 打赏
  • 举报
回复
你最好分开写适合别人读也适合调试 if(data1.Rows!=null) { Row row=data1.Rows[k]; object obj=row.Cells[3].Value if(obj!=null&&file.Lenth>=i) { string strFile=file[i]; string strObj=obj.ToString(); if strFile.Contains(strObj) && strFile != comboBox2.Text ) { file[i] =strFile.Replace(strObj, comboBox2.Text); } } } 4
elltrack 2014-10-18
  • 打赏
  • 举报
回复
一转程序员 2014-10-17
  • 打赏
  • 举报
回复
找到问题了,是在if后多加了个分号……
於黾 2014-10-17
  • 打赏
  • 举报
回复
还有,替换之前,要先判断data1.Rows[k].Cells[2].Value.ToString()不为String.Empty 你把空字符串替换成别的,是会出错的
於黾 2014-10-17
  • 打赏
  • 举报
回复
还有,Replace之前,根本没必要判断是否包含 反正不包含,也不会有字符串被替换掉
於黾 2014-10-17
  • 打赏
  • 举报
回复
这种代码,调试起来可就费劲了 你应该把data1.Rows[k].Cells[3].Value.ToString()先放到一个string型的局部变量里 然后if条件里判断它 这样一步一步断点跟,才好看出到底哪里不对 而且你应该在ToString之前判断这个Value不是null
宝_爸 2014-10-17
  • 打赏
  • 举报
回复
设置断点,单步跟踪,看看变量内的内容。
一转程序员 2014-10-16
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
我让你调试,运行到if的时候贴出三个变量的当前值
那我明天去公司试试
threenewbee 2014-10-16
  • 打赏
  • 举报
回复
我让你调试,运行到if的时候贴出三个变量的当前值
我叫小菜菜 2014-10-16
  • 打赏
  • 举报
回复
显然是格式的问题:if(xxx!=null) xxx.ToString();然后xxx.trim()去空格再比较
一转程序员 2014-10-16
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
下断点调试 file[i] data1.Rows[k].Cells[3].Value comboBox2.Text 这三个变量究竟是什么
string[] file = File.ReadAllLines(data1.Rows[k].Cells[5].Value.ToString());
                for (int i = 0; i < file.Length; i++)
                {
                    newfile.Add(file[i]);
                    if (data1.Rows[k].Cells[2].Value.ToString() != comboBox1.Text)
                    {
                        if (file[i].Contains(data1.Rows[k].Cells[2].Value.ToString()) && data1.Rows[k].Cells[2].Value.ToString() != comboBox1.Text + "0")
                        {
                            file[i] = file[k].Replace(data1.Rows[k].Cells[2].Value.ToString(), comboBox1.Text);
                        }
                    }
                    if (data1.Rows[k].Cells[3].Value.ToString() != comboBox2.Text)
                    {
                        if (file[i].Contains(data1.Rows[k].Cells[3].Value.ToString()) && data1.Rows[k].Cells[3].Value.ToString() != comboBox2.Text + "0")
                        {
                            file[i] = file[i].Replace(data1.Rows[k].Cells[3].Value.ToString(), comboBox2.Text);
                        }
                    }
                }
这样应该就能看明白了吧 data1.Rows[k].Cells[3].Value comboBox2.Text 这两个分别是两个数值,如果取到的一行中包含data1.Rows[k].Cells[3].Value,并且data1.Rows[k].Cells[3].Value跟comboBox2.Text不相等,那么就用comboBox2.Text替换掉file[i]中的data1.Rows[k].Cells[3].Value
threenewbee 2014-10-16
  • 打赏
  • 举报
回复
下断点调试 file[i] data1.Rows[k].Cells[3].Value comboBox2.Text 这三个变量究竟是什么
内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种分布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型分布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统中的建模与求解实践,帮助用户掌握MOPSO在实际工程问题中的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡分析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧