奇怪的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中对应行列中的字条串都会运行{}中的语句,但是这条语句结果也不对,没有替换掉

没弄明白这两个问题出在哪里,求大侠指教
...全文
247 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 这三个变量究竟是什么

110,571

社区成员

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

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

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