Как найти элемент в массиве строк, если его содержимое содержит мой поисковый запрос - PullRequest
0 голосов
/ 12 июля 2020

Мой строковый массив выглядит следующим образом:

string[] headers = {"Row Nr", "StartDate", "StartTime", "Q_1", "Q_96"};

Как мне найти элемент в массиве, который содержит мой поисковый запрос «дата»?

Я знаю, как найти элемент, значение которого равно моему поисковому запросу, например:

var match = headers.FirstOrDefault(stringToCheck => stringToCheck.Contains("StartDate"));

Но я не нашел никакого решения, которое находит мне элемент, когда часть моего элемента с IgnoreCase содержит элемент поиска, т. е. поиск "date" вместо "StartDate" в этом случае.

Ответы [ 3 ]

2 голосов
/ 12 июля 2020

Эта перегрузка Contains (String value, StringComparison compareType) не входит в netstandard2.0.

Вот альтернатива:

        string[] headers = { "Row Nr", "StartDate", "StartTime", "Q_1", "Q_96" };
        var match = headers.FirstOrDefault(c => !string.IsNullOrEmpty(c) && c.IndexOf("date", StringComparison.OrdinalIgnoreCase) >= 0);
0 голосов
/ 12 июля 2020

Я нашел решение этой проблемы следующим образом:

private void setDateColumnTitle ()
{
string stringToCheck = "date";
int stringToCheckIndex = -1;
string elementInArray = "Not Defined or Not Found";
if (Array.Exists<string> (headers, (Predicate<string>) delegate (string s)
    {
        stringToCheckIndex = s.IndexOf (stringToCheck, StringComparison.OrdinalIgnoreCase);
        elementInArray = s;
        return stringToCheckIndex > -1;
        }))
    {
    dateColTitle.Text = elementInArray; //a textbox to show the output
    }
}

Однако я обнаружил, что ответ @Lev проще и короче, что дает тот же результат:

    private void setDateColumnTitle ()
{

dateColTitle.Text = "Not Defined or Not Found";

var match = headers.FirstOrDefault(c => c.IndexOf("date", StringComparison.OrdinalIgnoreCase) > -1);

if (match!=null)                
    dateColTitle.Text = match;               
}

Итак, он заслуживает того, чтобы быть выбранным в качестве ответа на эту проблему.

0 голосов
/ 12 июля 2020

Просто используйте другую перегрузку для метода Contains:

var match = headers.FirstOrDefault(c => c.Contains("date", StringComparison.OrdinalIgnoreCase));
...