C# 执行列表中的任何项目<;字符串>;包含单独字符串的一部分

C# 执行列表中的任何项目<;字符串>;包含单独字符串的一部分,c#,.net,string,linq,C#,.net,String,Linq,假设我有一个列表,看起来像这样: 苹果 梨 桃子 李子 然后在单个字符串中,如果我有: I would like to eat a pear today (忽略大小写。)在这种情况下,我希望true,因为pear在列表和字符串中都可以找到。但如果我有一根绳子: I would like to eat a strawberry today 然后我会得到false,因为在句子中找不到列表的 我一直在玩各种各样的东西,比如: string result = Fruits.FirstOrDefa

假设我有一个
列表
,看起来像这样:

  • 苹果
  • 桃子
  • 李子
然后在单个字符串中,如果我有:

I would like to eat a pear today
(忽略大小写。)在这种情况下,我希望
true
,因为
pear
在列表和字符串中都可以找到。但如果我有一根绳子:

I would like to eat a strawberry today
然后我会得到
false
,因为在句子中找不到
列表的

我一直在玩各种各样的东西,比如:

string result = Fruits.FirstOrDefault(s => s.IndexOf(sentence) > 0);
其中
水果
列表
句子
是另一个字符串。不要把它钉死。

试试这个:

bool result = Fruits.Any(s => sentence.ToLower().Contains(s.ToLower()));

试试这个:

bool result = Fruits.Any(s => sentence.ToLower().Contains(s.ToLower()));


您需要以这种方式进行检查=>

string result=Fruits.Any(s=>句子.IndexOf(s)>-1)


string result=Fruits.Any(s=>句子.Contains))

您需要以这种方式进行检查=>

string result=Fruits.Any(s=>句子.IndexOf(s)>-1)


string result=Fruits.Any(s=>句子.Contains))

如果您愿意采用其他方法,可以使用以下方法:

public static bool ListItemInString(List<string> listOfStrings, string stringToCheck) {
    foreach(string str in listOfStrings) {
        if (stringToCheck.ToUpper().Contains(str.ToUpper())) {
            // return true if any of the list items are found in stringToCheck
            return true;
        }
    }
    // if the method has not returned true by this point then we return false
    // to indicate none of the list items were found within the string
    return false;
}
public static bool ListItemInString(listListOfstring,string-stringToCheck){
foreach(listofstring中的字符串str){
if(stringToCheck.ToUpper().Contains(str.ToUpper())){
//如果在stringToCheck中找到任何列表项,则返回true
返回true;
}
}
//如果此时该方法尚未返回true,则返回false
//指示在字符串中未找到任何列表项
返回false;
}
此方法在列表中循环,并根据指定的字符串检查每个项目。如果在foreach循环的任何一点上发现字符串中包含一个列表项,它将返回try,否则将返回false。它还考虑到您的非大小写敏感请求,在对字符串执行搜索之前,将两个字符串都转换为大写


编辑:我知道这更像是一种手动方法。如果这是一个多次执行的操作,本帖前面的答案同样可以转化为提高代码可读性的方法。

如果您愿意采用另一种方法,可以使用以下方法:

public static bool ListItemInString(List<string> listOfStrings, string stringToCheck) {
    foreach(string str in listOfStrings) {
        if (stringToCheck.ToUpper().Contains(str.ToUpper())) {
            // return true if any of the list items are found in stringToCheck
            return true;
        }
    }
    // if the method has not returned true by this point then we return false
    // to indicate none of the list items were found within the string
    return false;
}
public static bool ListItemInString(listListOfstring,string-stringToCheck){
foreach(listofstring中的字符串str){
if(stringToCheck.ToUpper().Contains(str.ToUpper())){
//如果在stringToCheck中找到任何列表项,则返回true
返回true;
}
}
//如果此时该方法尚未返回true,则返回false
//指示在字符串中未找到任何列表项
返回false;
}
此方法在列表中循环,并根据指定的字符串检查每个项目。如果在foreach循环的任何一点上发现字符串中包含一个列表项,它将返回try,否则将返回false。它还考虑到您的非大小写敏感请求,在对字符串执行搜索之前,将两个字符串都转换为大写


编辑:我知道这更像是一种手动方法。如果这是一个多次执行的操作,那么这篇文章前面的答案同样可以转化为提高代码可读性的方法。

根据最初的问题,如果您在句子中查找匹配字符串而不是布尔结果,以下代码应该会有所帮助:

List<string> Fruits = new List<string> { "Apple", "Pear", "Peach", "Plum" };
var sentence = "I would like to eat a pear and apple today";
var sentenceLower = sentence.ToLower(); 
var delimiter = ",";
var match = Fruits
  .Where(s => sentenceLower.Contains(s.ToLower()))
  .Aggregate((i, j) => i + delimiter + j);
List Fruits=新列表{“苹果”、“梨”、“桃”、“李子”};
var句子=“我今天想吃梨和苹果”;
var sentenceLower=句子.ToLower();
var分隔符=“,”;
变量匹配=水果
.Where(s=>sentenceLower.Contains(s.ToLower()))
.聚合((i,j)=>i+分隔符+j);

根据初始问题,如果您在句子中查找匹配字符串而不是布尔结果,则以下代码应该会有所帮助:

List<string> Fruits = new List<string> { "Apple", "Pear", "Peach", "Plum" };
var sentence = "I would like to eat a pear and apple today";
var sentenceLower = sentence.ToLower(); 
var delimiter = ",";
var match = Fruits
  .Where(s => sentenceLower.Contains(s.ToLower()))
  .Aggregate((i, j) => i + delimiter + j);
List Fruits=新列表{“苹果”、“梨”、“桃”、“李子”};
var句子=“我今天想吃梨和苹果”;
var sentenceLower=句子.ToLower();
var分隔符=“,”;
变量匹配=水果
.Where(s=>sentenceLower.Contains(s.ToLower()))
.聚合((i,j)=>i+分隔符+j);

因此,如果您想将
true\false
作为结果,可以像
string result=Fruits.Any(s=>s.IndexOf(句子)>0)那样使用它布尔结果=。。。。?我来试一试。我总是得到'false':-(您需要以这种方式检查=>
string result=Fruits.Any(s=>句子.IndexOf(s)>-1)
如果不清楚,问题是您要检查单词是否包含句子,而不是句子是否包含单词。因此,如果您想得到
true\false
结果,可以像
string result=Fruits.Any(s=>s.IndexOf(句子)>0)一样使用它
bool result=..?我来试一试。我总是会得到'false':-(你需要用这种方式检查=>
string result=Fruits.Any(s=>句子.IndexOf(s)>-1);
如果不清楚,问题是你在检查单词是否包含句子,而不是句子是否包含单词。嗯,我认为这看起来不错,但我得到的是,“string不包含“contains”的定义”嗯,我认为这看起来不错,但我得到的是,“string不包含”contains的定义" "
Any
返回一个
bool
不是
string
@AominèOP想要从问题中理解bool
我想要true
或者
然后我想要false
Any
返回一个
bool
不是
string
@AominèOP想要从问题中理解bool
我想要t如果
那么我会