C# 使用lambda表达式选择它在字符串中匹配的数组元素

C# 使用lambda表达式选择它在字符串中匹配的数组元素,c#,lambda,C#,Lambda,我试图在数组中选择一个元素,该元素与字符串中的某个元素相匹配 例如: string[] splitChar = new string[] { "+=", "-=" }; string content = "5+=2"; 因此,我想检查内容是否包含splitChar中的内容,如果包含splitChar,则选择该值,以便将其分配给字符串变量。您是否尝试过使用FirstOrDefault进行如下检查 string[] splitChar = new string[] { "+=", "-=" };

我试图在数组中选择一个元素,该元素与字符串中的某个元素相匹配

例如:

string[] splitChar = new string[] { "+=", "-=" };
string content = "5+=2";

因此,我想检查内容是否包含splitChar中的内容,如果包含splitChar,则选择该值,以便将其分配给字符串变量。

您是否尝试过使用FirstOrDefault进行如下检查

string[] splitChar = new string[] { "+=", "-=" };
string content = "5+=2";        
var stringPresent = splitChar.FirstOrDefault(x=>content.Contains(x));
if(String.IsNullOrEmpty(stringPresent))
    Console.WriteLine("Not found");
else
Console.WriteLine(stringPresent);

检查此项

您是否尝试过使用FirstOrDefault进行如下检查

string[] splitChar = new string[] { "+=", "-=" };
string content = "5+=2";        
var stringPresent = splitChar.FirstOrDefault(x=>content.Contains(x));
if(String.IsNullOrEmpty(stringPresent))
    Console.WriteLine("Not found");
else
Console.WriteLine(stringPresent);

检查此项

兰博达斯和林克将为此付出过多代价。您只需执行一个简单的foreach:

如果您真的想使用LINQ,FirstOrDefault将是您的最佳选择:

string match = splitChar.FirstOrDefault(s => content.Contains(s));

if (!String.IsNullOrEmpty(match))
{
    // Do whatever with `match`
}

Lambdas和LINQ这样做太过分了。您只需执行一个简单的foreach:

如果您真的想使用LINQ,FirstOrDefault将是您的最佳选择:

string match = splitChar.FirstOrDefault(s => content.Contains(s));

if (!String.IsNullOrEmpty(match))
{
    // Do whatever with `match`
}


应该提到的是,我想把它找到的值赋给一个字符串变量,而不是检查它的present@SimonIsaksen:请您查看一下更新和示例,让我知道您正在查找的是,这也可以,谢谢您的解决方案:@SimonIsaksen:很高兴听到这个。。Happy codingShould提到我想把它找到的值赋给一个字符串变量,而不是检查它的present@SimonIsaksen当前位置请您查看更新和示例,并让我知道您正在查看的是,这也可以正常工作,谢谢你的解决方案:@SimonIsaksen:很高兴听到这个。。快乐编码如果它发现了不止一个元素呢?或者这不可能吗?5+=2-=1?在我的例子中,这是不可能的,但是谢谢你指出。如果它发现了多个元素呢?或者这不可能吗?5+=2-=1?在我的情况下,这是不可能的,但谢谢你指出这一点。谢谢你的两个选择,正如我所需要的。是的,我知道foreach会更好,但出于某种原因,要求这个项目的人希望lambda到位。马克会尽快解决吗?为什么会有点过分呢?我认为LINQ版本比foreach循环表达的意图要清楚得多…@Timitry我说这是过度杀伤力,而不是更干净。这取决于你的优先事项。就我个人而言,我不喜欢到处乱扔LINQ方法,因为当一个简单的for或foreach循环同样有效地完成同样的工作时,我可以这样做。这是生产代码,不是高尔夫代码。如果需要表达意图,请添加评论。@Abion47好的,我明白你的意思了!虽然我不认为LINQ和code golf有任何关系。我用C做了很多函数式编程,并且总是喜欢LINQ到循环-在生产代码中。但是,由于这是一个品味问题,我们不需要讨论:-@Abion47我不喜欢随意使用LINQ方法,因为当一个简单的for或foreach循环同样有效时,我可以这样做。在我看来,LINQ是实现简单迭代的更简单的方法。它减少了嵌套和不必要的长foreach语句,例如一个简单的过滤操作,并且一旦您了解了lambdas背后的基础知识,它就增加了可读性。当您可以单独处理列表中的每一项,并且处理一行的结果不会影响另一行的结果时,LINQ真的非常出色。感谢您提供这两个选项,正如我所需。是的,我知道foreach会更好,但出于某种原因,要求这个项目的人希望lambda到位。马克会尽快解决吗?为什么会有点过分呢?我认为LINQ版本比foreach循环表达的意图要清楚得多…@Timitry我说这是过度杀伤力,而不是更干净。这取决于你的优先事项。就我个人而言,我不喜欢到处乱扔LINQ方法,因为当一个简单的for或foreach循环同样有效地完成同样的工作时,我可以这样做。这是生产代码,不是高尔夫代码。如果需要表达意图,请添加评论。@Abion47好的,我明白你的意思了!虽然我不认为LINQ和code golf有任何关系。我用C做了很多函数式编程,并且总是喜欢LINQ到循环-在生产代码中。但是,由于这是一个品味问题,我们不需要讨论:-@Abion47我不喜欢随意使用LINQ方法,因为当一个简单的for或foreach循环同样有效时,我可以这样做。在我看来,LINQ是实现简单迭代的更简单的方法。它减少了嵌套和不必要的长foreach语句,例如一个简单的过滤操作,并且一旦您了解了lambdas背后的基础知识,它就增加了可读性。当您可以单独处理列表中的每一项,并且处理一行的结果不会影响另一行的结果时,LINQ真的很出色。