使用.Except,不区分大小写C#

Ste*_*e W 0 c#

我正在研究一个读取2个csv文件的项目:

var myFullCsv = ReadFile(myFullCsvFilePath);
var masterCsv = ReadFile(csvFilePath);
Run Code Online (Sandbox Code Playgroud)

然后创建一个新的var,其中包含myFullCsv中存在的额外行,但不包含主Csv.代码很棒,因为它简单:

var extraFilesCsv = myFullCsv.Except(masterCsv);
Run Code Online (Sandbox Code Playgroud)

读入的csv文件包含如下数据:

c01.jpg,95182,24f77a1e,\Folder1\FolderA\,
c02.jpg,131088,c17b1f13,\Folder1\FolderA\,
c03.jpg,129485,ddc964ec,\Folder1\FolderA\,
c04.jpg,100999,930ee633,\Folder1\FolderA\,
c05.jpg,101638,b89f1f28,\Folder1\FolderA\,
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚发现每个文件中某些字符不匹配的情况.例如(JPG in caps):

c01.JPG,95182,24f77a1e,\Folder1\FolderA\,
Run Code Online (Sandbox Code Playgroud)

如果数据是这样的,那么它不包含在extraFilesCsv中,但我需要它.任何人都可以告诉我如何使这段代码对文本的情况不敏感?

编辑:对不起,我忘了ReadFile不是标准命令.这是代码:

public static IEnumerable<string> ReadFile(string path)
        {
            string line;

            using (var reader = File.OpenText(path))
                while ((line = reader.ReadLine()) != null)
                    yield return line;
        }
Run Code Online (Sandbox Code Playgroud)

Gra*_*ICA 5

我假设你已经读过两个csv文件,并且有一个代表每个文件的字符串集合.

您可以EqualityComparer在调用中指定特定的Except(),指示两个对象集合之间要进行的比较类型.

您可以创建自己的比较器,或者假设两个集合都是字符串,请尝试指定忽略大小写的现有集合:

var extraFilesCsv
    = myFullCsv.Except(masterCsv, StringComparer.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

默认情况下,如果您未指定比较器,则使用它EqualityComparer<TElement>.Default,它根据您要比较的类类型而有所不同.

对于字符串,它首先a==b默认进行直接比较,这是区分大小写的.( 该类的确切实现string 有点复杂,但可能不必在此处发布.)