Вы можете сделать это, используя метод расширения для IEnumerable<string>
как:
public static class EnumerableExtensions
{
public static bool Contains(this IEnumerable<string> source, string value, StringComparison comparison)
{
if (source == null)
{
return false; // nothing is a member of the empty set
}
return source.Any(s => string.Equals(s, value, comparison));
}
}
затем изменить
if (destlinestotal.Contains(sline))
в
if (destlinestotal.Contains(sline, StringComparison.OrdinalIgnoreCase))
Однако, если множества большие и/или вы собираетесь делайте это очень часто, то, как вы это делаете, очень неэффективно. По существу, вы выполняете операцию O (n), а для каждой строки в источнике вы сравниваете ее с потенциально всеми линиями в пункте назначения. Было бы лучше создать HashSet из столбцов назначения с помощью case insenstivie-компаратора, а затем перебирать исходные столбцы, проверяя, существует ли каждый из них в HashSet столбцов назначения. Это был бы алгоритм O (n). обратите внимание, что Содержит на HashSet будет использовать компаратор, который вы предоставляете в конструкторе.
string[] sourcelinestotal =
File.ReadAllLines("C:\\testdirectory\\" + "sourcecolumns.txt");
HashSet<string> destlinestotal =
new HashSet<string>(
File.ReadAllLines("C:\\testdirectory\\" + "destcolumns.txt"),
StringComparer.OrdinalIgnoreCase
);
foreach (string sline in sourcelinestotal)
{
if (!destlinestotal.Contains(sline))
{
File.AppendAllText("C:\\testdirectory\\" + "missingcolumns.txt", sline);
}
}
В ретроспективе, я предпочитаю это решение более просто написать свой собственный нечувствительны к регистру содержит для IEnumerable<string>
, если не нужен метод для чего-то еще. Фактически, для поддержки с использованием реализации HashSet на самом деле меньше кода (вашего собственного).
@aba - в общем случае коллекция может содержать пустую строку, хотя, возможно, в этом случае нет. – tvanfosson
Я не могу это скомпилировать Использование универсального типа 'System.Collections.Generic.HashSet 'требует аргументов типа' 0 '\t C –
2010-04-28 19:46:26
Я упустил спецификатор типа в конструкторе HashSet. Я исправил это. – tvanfosson