以下是两种扩展方法 ContainsAny()将检查IEnumerable中的任何字符串元素是否包含调用该方法的字符串。好的,没问题
_ContainsAny()使用链式Linq表达式来检查IEnumerable中是否包含任何字符串元素。
1)第一个问题是,结果是否存在差异,它可以产生以下两种不同类型的逻辑。我得到了相同的结果。
2)第二个问题是,Chain Linq表达如何在这里工作?
return stringsToMatch.Any(item => source.Contains(item));
Contains()为Any()方法返回一个布尔值?
Any()和Contains()方法在此链式表达式中如何协同工作?
public static class ContainsAnyExtension
{
public static bool ContainsAny(this string source, IEnumerable<string> stringsToMatch)
{
return stringsToMatch.Contains(source);
}
public static bool _ContainsAny(this string source, IEnumerable<string> stringsToMatch)
{
return stringsToMatch.Any(item => source.Contains(item));
}
}
答案 0 :(得分:1)
回答你的问题:
首先,它们根本不相同,第一个是检查列表是否将字符串作为元素,而第二个检查每个元素是否有字符串作为其一部分。
1)第一个问题是,结果是否存在差异 它可以产生以下两种不同类型的逻辑。我明白了 相同的结果。
是的,只有当列表包含元素时才会返回第一个(true / false) 如果任何元素具有cotnained IN IT字符串,则第二个将返回。
2)第二个问题是,Chain Linq表达式如何工作 这里? return stringsToMatch.Any(item =&gt; source.Contains(item)); Contains()为Any()方法返回一个布尔值?到底是怎么回事 Any()和Contains()方法在此链中一起工作 表达
这不是链表达式,它只是一个布尔函数作为扩展添加。
答案 1 :(得分:0)
它们是两个不同的功能:
public static bool ContainsAny(this string source, IEnumerable<string> stringsToMatch)
{
return stringsToMatch.Contains(source);
}
第一个是LINQ中定义的扩展方法。它会检查列表stringsToMatch
以查看其中一个字符串是否等于您的source
。就像在,它将字符串与字符串一对一地进行比较。
public static bool _ContainsAny(this string source, IEnumerable<string> stringsToMatch)
{
return stringsToMatch.Any(item => source.Contains(item));
}
第二个是string
的实例方法。 source.Contains(item)
的作用是,引用文档,&#34;返回一个值,指示指定的子字符串是否出现在此字符串中。&#34; 在这种情况下,它检查{是否{ {1}}包含子字符串source
。
item
的作用是返回Any()
或true
,无论枚举中的任何项是否为所提供的lambda函数返回false
。您可以定义一个匿名方法,而不是放置Lambda函数,它的工作原理相同:
true
您可能会看到为什么使用lambda函数。它只是看起来更好。
编辑:我在Visual Studio中玩它,显然这也是有效的代码。哈!!我不知道它是否会起作用。
return stringsToMatch.Any(delegate (string item) { return source.Contains(item); });
要查看这两种方法的定义,请在Visual Studio中右键单击它们,然后选择&#34;转到定义&#34;或者&#34; Peek定义&#34;。这将带您进入两者的定义和评论。
要自己查看差异,请尝试使用 return stringsToMatch.Any(source.Contains);
中source
不在stringstoMatch
的数据集,但stringsToMatch
中的某些字符串是{{1}的子字符串}}。你马上就会看到这种差异。例如:source
是"abc"
的子字符串。
编辑:我在C#interactive中试过它:
"xyzabcdef"
您现在可以看到两种方法之间的区别。