读书人

关于listlt;stringgt; 的Contains 有关问题

发布时间: 2013-07-04 11:45:55 作者: rapoo

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


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 却能正常检查到是否存在相同项?

会是什么原因呢?


[解决办法]
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);
}
}
}
}


[解决办法]
上面的代码



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

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


ListArray.Add("1");
ListArray.Add("2");
if (ListArray.Contains(str))
{

}


[解决办法]
重新修改代码如下,依然可以如此操作。
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);
}
}
}
}
}

[解决办法]
data 和 list 内部的值不一致吧??

[解决办法]
引用:
问题的关键是

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

看图:http://blog.csdn.net/bugttp/article/details/6880338

原来如此
"121211212 浙江/嘉兴" 这后面还有“ 浙江/嘉兴”呢 怎么可能相等呢


[解决办法]
你可以用这个
string[] str = new string[10];
str[0] = "12121313 浙江/嘉兴";
bool ss = str[0].Contains("12121313"); //true

读书人网 >C#

热点推荐