如果其内容包含我的搜索词,如何在字符串数组中查找元素

How to find the element in an string array if its content contains my search term

我的字符串数组是这样的:

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

如何在数组中找到包含我的搜索词“日期”的元素?

我知道如何找到其值等于我的搜索词的元素,如下所示:

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

但是,当我的 IgnoreCase 元素的一部分包含搜索项时,我没有找到任何解决方案来找到我的元素,即在这种情况下搜索“date”而不是“StartDate”。

只需为 Contains 方法使用另一个重载:

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

此重载 Contains(String value, StringComparison comparisonType) 未包含在 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);

我找到了解决这个问题的方法如下:

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;               
}

所以,它值得被选为这个问题的答案。