1

我试图找出我的数组中的特定单元格是否包含给定字符串的一部分。由于数组不使用 .Contains 我正在使用 .Any,但似乎我对 .Any 工作原理的理解太模糊而无法正确处理。

public void ProcessCSV (string typeName) {

    for (int y = 0; y < CSVReader.grid.GetUpperBound(1); y++) {
        if (CSVReader.grid[0,y] != null) {
            if ((CSVReader.grid[0,y].Any(s => typeName.Contains(s)))) {
                  // (add it to a new list)

所以我输入了“Pork”、“Farm”等字符串。有时它似乎工作得很好,例如,如果 typeName 是“Farm”,我只能从数组中取回包含 [0, y] 中的字符串的行。但在其他时候,如果我使用 Farm、另一个字符串或随机乱码,它只会返回包含任何字符串的每一行。

当我以这种方式调用 .Any 时实际发生了什么?我可以使用一些替代方法吗?

4

1 回答 1

5

你可能有错误的方式。

Any将返回一个布尔值,指示序列中的任何元素是否满足条件。当您键入 时Any(s => ...)s是要检查的序列中的元素。

所以当你输入:

.Any(s => typeName.Contains(s))

...您本质上是在问:

字符串中是否包含序列中的任何元素?typeName

例如,如果typeNamePorkAny()只会true在 时返回"Pork".Contains("ork")。你的意思可能是相反的:

.Any(s => s.Contains(typeName))

是否有任何元素包含字符串typeName

所以"Pork and beef".Contains("Pork")返回true


如果您想要满足条件的序列中的第一个FirstOrDefault元素(而不是布尔真值),请使用(或者,当您知道总是至少有一个时,您可以使用First)。例如:

.FirstOrDefault(s => typeName.Contains(s))

从包含在字符串中的序列中返回第一个typeName元素;或没有时的默认值。

或者,反过来(我仍然认为你的意思):

.FirstOrDefault(s => s.Contains(typeName))

从包含字符串的序列中返回第一个typeName元素;或没有时的默认值。

于 2013-03-05T02:36:23.867 回答