我正在为学校做一个ITP项目。在这个项目中,我这样做,当我在列表框中添加一个单词时,有一个过滤器在列表框中搜索单词,如果匹配为假,则将单词添加到列表中。但是这个过滤器不区分大小写,这意味着它会添加单词audi,即使有奥迪,但由于第一个字母是大写,过滤器不会检测到这一点。这个位的代码是
private void btnAddWord_Click(object sender, EventArgs e)
{
if (this.lbxUnsortedList.Items.Contains(this.tbxAddWord.Text) == false)
{
//if the textbox is empty
if (tbxAddWord.Text == "")
{
MessageBox.Show("You have entered no value in the textbox.");
tbxAddWord.Focus();
}
//if the number of items in the listbox is greater than 29
if (lbxUnsortedList.Items.Count > 29)
{
MessageBox.Show("You have exceeded the maximum number of values in the list.");
tbxAddWord.Text = "";
}
//if the number of items in the listbox is less than 29
else
{
//add word to the listbox
this.lbxUnsortedList.Items.Add(this.tbxAddWord.Text);
//update tbxListBoxCount
tbxListboxCount.Text = lbxUnsortedList.Items.Count.ToString();
//onclick, conduct the bubble sort
bool swapped;
string temp;
do
{
swapped = false;
for (int i = 0; i < lbxUnsortedList.Items.Count - 1; i++)
{
int result = lbxUnsortedList.Items[i].ToString().CompareTo(lbxUnsortedList.Items[i + 1]);
if (result > 0)
{
temp = lbxUnsortedList.Items[i].ToString();
lbxUnsortedList.Items[i] = lbxUnsortedList.Items[i + 1];
lbxUnsortedList.Items[i + 1] = temp;
swapped = true;
}
}
} while (swapped == true);
tbxAddWord.Text = "";
}
}
if (this.lbxUnsortedList.Items.Contains(this.tbxAddWord.Text) == true)
{
MessageBox.Show("The word that you have added is already on the list");
tbxAddWord.Text = "";
tbxAddWord.Focus();
}
}
我想知道如何使这个案例不敏感,以便即使第一个字母是大写的,过滤器也会拾取奥迪。
答案 0 :(得分:0)
试试这个
public bool checkItemExist(string itemToCheck)
{
return lbxUnsortedList.Items.Cast<string>.Where(a=>a.ToLower().Equals(tbxAddWord.Text.ToLower()).Count > 0;
}
答案 1 :(得分:0)
我只是建议你这个条件,它不是最佳的,但它按照你想要的方式工作:
bool contains = false;
for (int i = 0; i < lbxUnsortedList.Items.Count; i++)
{
if (lbxUnsortedList.Items[i].ToString().ToLower() == this.tbxAddWord.Text.ToString().ToLower())
{
contains = true;
}
}
if (!contains)
{
//your code
}
else
{
MessageBox.Show("The word that you have added is already on the list");
tbxAddWord.Text = "";
tbxAddWord.Focus();
}
答案 2 :(得分:0)
这link应该可以满足您的需求。帖子的某些部分说
culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase)
另外,您可以尝试以小写字母存储单词
this.lbxUnsortedList.Items.Add(this.tbxAddWord.Text.ToLower());
然后以相同的方式搜索字符串
this.lbxUnsortedList.Items.Contains(this.tbxAddWord.Text.ToLower()) == true
但是如果您使用'lbxUnsortedList'进行显示,那么使用带有键作为普通单词和小写值的字典也可能会有所帮助。
此外,如果您允许我扔其他内容,请使用string.IsNullOrEmpty(tbxAddWord.Text)
代替tbxAddWord.Text == ""
。您也可以使用tbxAddWord.Text = string.Empty;
。
答案 3 :(得分:0)
在比较两个字符串值之前,必须将字符串转换为大写或小写。
循环显示列表框lbxUnsortedList
以从列表中获取项目。并将每个字符串与TextBox中的输入字符串tbxAddWord
进行比较。
for (int i = 0; i < lbxUnsortedList.Items.Count; i++)
{
if (lbxUnsortedList.Items[i].ToString().ToLower() == this.tbxAddWord.Text.ToString().ToLower())
{
//Your Code
}
}
答案 4 :(得分:0)
对我来说是这样的
var query = _repository.Get(e => e.IsDeleteUser != true, null, "Role");
if (!string.IsNullOrEmpty(filter.UserName))
{
query = query.Where(e => e.UserName.**ToLower()**.Contains(filter.UserName**.ToLower()**)).ToList();
}