关于list 的Contains 问题? 100分求解!!!!!!!

bugttp 2011-10-17 09:46:31

List<string> ListArray = new List<string>();
string str ="";


//生成str 并开始对ListArray进行填充

if(!ListArray.Contains(str)) //检查str 是否是ListArray中的项
{
//填充
}

-----------------------------------------------------
无可厚非的,如果ListArray中存在的一个元素与str相同,str不添加到ListArray中。但是,洽洽问题出来了!

fun(str)
{
lock(obj)
{
if(!ListArray.Contains(str)) //这里无法正常判断,即str是ListArray中的项,也返回false
//填充
else
//不填充
}
}

在这个函数里即使str是ListArray中的项,也返回false, 假使我们在做一个按钮,在按钮单击事件下再对ListArray使用ListArray.Contains 却能正常检查到是否存在相同项?

会是什么原因呢?

...全文
772 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
HAPHER11 2013-06-21
  • 打赏
  • 举报
回复
看错了, 不好意思
HAPHER11 2013-06-21
  • 打赏
  • 举报
回复
楼主没有初始化List<String>吧
言多必失 2011-10-17
  • 打赏
  • 举报
回复
改后代码,你的两个字符串更本不想等,肯定是Fale了。 还是要把问题说清楚的,不然别人真的不知道。


private void addtoarray(string addstr)
{
lock (thisLock)
{
for (int i = 0; i < listarray.Count; i++)
{
if (listarray[i].Contains(addstr))
{
string show = addstr + " has been add to array";
new ToolTip().Show(show, textBox1, 800);

}
if (i==listarray.Count-1)
{
listarray.Add(addstr);

}
}


}
}
youzelin 2011-10-17
  • 打赏
  • 举报
回复
出现这种奇怪问题,两种情况,第一,Contains 方法内部实现错误;第二,调用代码问题,你觉得会是什么问题呢?如果你觉得是后者,就应当把完整相关代码贴上来,我们才能帮你查错。光看你的 demo code 看不出来的。
bugttp 2011-10-17
  • 打赏
  • 举报
回复
-_-! 是我不仔细造成的,赶紧结贴
wnyxy001 2011-10-17
  • 打赏
  • 举报
回复
你可以用这个
string[] str = new string[10];
str[0] = "12121313 浙江/嘉兴";
bool ss = str[0].Contains("12121313"); //true
wnyxy001 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bugttp 的回复:]

问题的关键是

fun 函数的中ListArray.Contains不能正常检查到
btn__Click下的可以正常检查到

看图:http://blog.csdn.net/bugttp/article/details/6880338
[/Quote]
原来如此
"121211212 浙江/嘉兴" 这后面还有“ 浙江/嘉兴”呢 怎么可能相等呢
真相重于对错 2011-10-17
  • 打赏
  • 举报
回复
data 和 list 内部的值不一致吧??
bugttp 2011-10-17
  • 打赏
  • 举报
回复
问题的关键是

fun 函数的中ListArray.Contains不能正常检查到
btn__Click下的可以正常检查到

看图:http://blog.csdn.net/bugttp/article/details/6880338
Arnuonly 2011-10-17
  • 打赏
  • 举报
回复
重新修改代码如下,依然可以如此操作。
namespace ListArrayContains
{
public partial class Form1 : Form
{
private Object thisLock = new Object();
List<string> listarray = new List<string>();
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string addstr = textBox1.Text;
addtoarray(addstr);
}

private void addtoarray(string addstr)
{
lock (thisLock)
{
if (!listarray.Contains(addstr))
{
listarray.Add(addstr);
}
else
{
string show = addstr + " has been add to array";
new ToolTip().Show(show, textBox1, 800);
}
}
}
}
}
  • 打赏
  • 举报
回复
经过测试之后,Contains 一切正常,也许我们都错了.

你完全可以定义一个简单的测试一下,看看是否正常,是不是本部分代码的问题

List<string> ListArray = new List<string>();
string str = "1";
ListArray.Add("1");
ListArray.Add("2");
if (ListArray.Contains(str))
{

}
Arnuonly 2011-10-17
  • 打赏
  • 举报
回复
额,我要说的是“did not add to array”,少了个not。。。呵呵。
etherealkite 2011-10-17
  • 打赏
  • 举报
回复
楼主的代码贴得完整一点,你填充的代码是怎么写的?
gxmark 2011-10-17
  • 打赏
  • 举报
回复
最好能贴出完成代码和给出开发、编译和运行环境
q107770540 2011-10-17
  • 打赏
  • 举报
回复
Try:

ListArray.Any(l=>l==str.Trim())
真相重于对错 2011-10-17
  • 打赏
  • 举报
回复
调试,别人没有你的环境,一切只能考瞎猜
Arnuonly 2011-10-17
  • 打赏
  • 举报
回复
上面的代码
public partial class Form1 : Form
{
private Object thisLock = new Object();
List<string> listarray = new List<string>();
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
lock(thisLock)
{
if (!listarray.Contains(textBox1.Text))
{
listarray.Add(textBox1.Text);
}
else
{
new ToolTip().Show("did add to array", textBox1,500);
}
}
}
}
wnyxy001 2011-10-17
  • 打赏
  • 举报
回复
觉得可能还是空格

List<string> ListArray = new List<string>();
ListArray.Add("qw");
bool aa= ListArray.Contains("qw "); //false
bool bb = ListArray.Contains("qw"); //true
Arnuonly 2011-10-17
  • 打赏
  • 举报
回复
LZ 我做了个测试,没有发现你所说的问题。
新建一个winform程序,一个button 名称为:button1,一个textbox名称为:textbox1,其他没有任何修改,form1的代码如下。没有出现你说的问题:
public partial class Form1 : Form
{
private Object thisLock = new Object();
List<string> listarray = new List<string>();
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
lock(thisLock)
{
if (!listarray.Contains(textBox1.Text))
{
listarray.Add(textBox1.Text);
}
else
{
new ToolTip().Show("did add to array", textBox1,500);
}
}
}
}
bugttp 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 return_false 的回复:]

C# code

if(!ListArray.Contains(str))


这个是不包含 str是ListArray中的项,当然会返回false
应该是
C# code

if (ListArray.Contains(str))
[/Quote]

你可能没看明白
加载更多回复(5)

110,568

社区成员

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

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

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