我有一个应用程序可以比较用户输入的两个数据。但是,目前,如果两个值相同但一个是大写,则应用程序将其归类为不匹配。
现在我之前使用过StringComparison.InvariantCultureIgnoreCase
,但我不确定如何在foreach循环中添加它。
我目前的代码如下;
List<string> mylistA = new List<string>();
List<string> mylistB = new List<string>();
if (listATextBox.LineCount > 0)
for (int i = 1; i <= listATextBox.LineCount; i++)
mylistA.Add(listATextBox.GetLineText(i - 1).Replace(Environment.NewLine, "").Trim());
if (listBTextBox.LineCount > 0)
for (int i = 1; i <= listBTextBox.LineCount; i++)
mylistB.Add(listBTextBox.GetLineText(i - 1).Replace(Environment.NewLine, "").Trim());
foreach (string line in mylistA)
{
if (mylistB.Contains(line))
{
ResultsToDocument();
}
}
答案 0 :(得分:5)
您可以将Enumerable.Contains
与此比较器一起用作参数而不是List.Contains
:
android:editable="false"
更有效的方法是foreach (string line in mylistA)
{
if (mylistB.Contains(line, StringComparer.InvariantCultureIgnoreCase))
{
ResultsToDocument();
}
}
也会出现这种情况:
Intersect
答案 1 :(得分:3)
试试这个:
foreach (string line in mylistA)
{
if (mylistB.Any(b => b.Equals(line, StringComparison.OrdinalIgnoreCase)))
{
ResultsToDocument();
}
}
答案 2 :(得分:2)
为了获得更好的性能和可读性,您可以使用Intersect
foreach (var element in mylistA.Intersect(mylistB, StringComparer.OrdinalIgnoreCase))
ResultsToDocument();
如果mylistA
中存在需要保留的重复项。使用哈希集进行查找将是正确的方法,并且具有与交叉解决方案相同的性能。
var set = new HashSet<string>(mylistB, StringComparer.OrdinalIgnoreCase)
foreach (string line in mylistA)
{
if (set.Contains(line))
{
ResultsToDocument();
}
}
答案 3 :(得分:-2)
我选择:
foreach (string lineA in mylistA)
{
foreach (string lineB in mylistB)
{
if (lineB.ToUpper() == lineA.ToUpper())
{
ResultsToDocument();
}
}
}
但是可能有更好的解决方案来实现相同的结果