在 LINQ 中获取与 Any 匹配的字符串

Get string that matched with Any in LINQ

我需要测试一个字符串,看看它是否以字符串数组中的任何一个结尾。

我通过以下 this answer:

找到了使用 LINQ 的完美解决方案
string test = "foo+";
string[] operators = { "+", "-", "*", "/" };
bool result = operators.Any(x => test.EndsWith(x));

现在我想获取匹配的字符串,这就是我目前遇到的问题。


我试着在最后添加

text_field.Text = x;

并且出现关于范围的消息错误 - 理所当然,我期待该错误。我还尝试在最顶部声明​​一个名为 x 的字符串变量,并且出现了另一个错误 - 关于无法在不同范围内重新声明变量的问题。我想我已经习惯了 PHP,您可以毫无问题地重新声明一个变量。

我会为此使用正则表达式

string test = "foo+";
var match = Regex.Match(test, @".+([\+\-\*\])$").Groups[1].Value;
如果字符串不以 +-*/

结尾,

match 将是 ""

你最好的选择是做一个 FirstOrDefault 然后检查它是否是 null/empty/etc 就好像它是你的布尔值一样。虽然这是一个非常基本的例子,但它应该能说明问题。你如何处理这个结果,如果它应该只是一个或多个,等等取决于你的情况。

    static void Main()
    {
        string test = "foo+";
        string[] operators = { "+", "-", "*", "/" };
        bool result = operators.Any(x => test.EndsWith(x));

        string actualResult = operators.FirstOrDefault(x => test.EndsWith(x));

        if (result)
        {
            Console.WriteLine("Yay!");
        }

        if (!string.IsNullOrWhiteSpace(actualResult))
        {
            Console.WriteLine("Also Yay!");
        }
    }

如果我没理解错的话,这会让你成为接线员

string test = "foo+";
string[] operators = { "+", "-", "*", "/" };
var result = operators.Where(x => test.EndsWith(x)) ;

这只会 return 最后使用的运算符,所以如果它以 -+* 结尾,它会给你字符串中的最后一个字符