Проверьте, содержит ли строка строку из массива, затем используйте ее в методе LastIndexOf

Я хочу проверить, содержит ли моя входная строка одну из 3 строк, и использовать ее позже. Вот что у меня так далеко:

// this is just an example of 1 out of 3 possible variations
string titleID = "document for the period ended 31 March 2014";

// the array values represent 3 possible variations that I might encounter
string s1 = "ended ";
string s2 = "Ended ";
string s3 = "Ending ";
string[] sArray = new [] { s1, s2, s3};

if(sArray.Any(titleID.Contains))
{
      TakeEndPeriod = titleID.Substring(titleID.LastIndexOf(string));
}

Я хочу проверить, в какой строке массива найден метод Contains, и использовать именно эту в методе LastIndexOf. Я на правильном пути здесь?

РЕДАКТИРОВАТЬ:

Извините за путаницу здесь. titleID.LastIndexOf(string) <- строка является просто фиктивной и представляет то, чего я хотел бы достичь здесь. Ранее я использовал метод Contains, чтобы проверить только одно из значений f.eg. if (titleID.Contains "закончилась"), а затем я бы сделал titleID.LastIndexOf ("закончилась"). Я мог бы иметь 3 отдельных блока, каждый из которых основывался бы на "закончили", "заканчивал" или "заканчивал", используя каждый из них в методе LastIndexOf, но я хочу сделать его более простым и гибким по отношению к вводу, иначе у меня было бы в 3 раза больше кода и я хотел бы избежать этого.

РЕДАКТИРОВАТЬ № 2:

Как бы я достиг того же результата, если бы я не мог использовать System.Linq? Потому что решение, представленное здесь, работает, когда я тестирую его в IDE, но само программное обеспечение, которое будет использовать этот код, не дает мне возможности объявить "using System.Linq". Я думаю, что мне нужно что-то вроде System.Linq.Enumerable.FirstOrDefault.

2 ответа

Решение
        // this is just an example of 1 out of 3 possible variations
        string titleID = "document for the period ended 31 March 2014";

        // the array values represent 3 possible variations that I might encounter
        string s1 = "ended ";
        string s2 = "Ended ";
        string s3 = "Ending ";
        string[] sArray = new [] { s1, s2, s3};

        var stringMatch = sArray.FirstOrDefault(titleID.Contains);
        if (stringMatch != null)
        {
            TakeEndPeriod = titleID.Substring(titleID.LastIndexOf(stringMatch));
        }

Это должно сделать это.

// this is just an example of 1 out of 3 possible variations
string titleID = "document for the period ended 31 March 2014";

string s1 = "ended ";
string s2 = "Ended ";
string s3 = "Ending ";
string[] sArray = new [] { s1, s2, s3};

var maxLastIndex = -2; 
foreach(var s in sArray)
{
    var lastIndex = titleID.LastIndexOf(s);
    if(lastIndex > maxLastIndex)
        maxLastIndex = lastIndex;
}

/// if maxLastIndex is still -1 it means no matching elements exist in the string.
Другие вопросы по тегам