Contains 方法必须使用 () 吗?
Is it necessary to use () with the Contains method?
我有这样的代码:
string target = ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
我没有编写代码,我正在尝试了解它的作用。我看到有一个方法叫做Contains()
,但是这里不明白为什么Contains
后面没有()。这是不同的东西吗?有人可以解释这段代码的作用吗?
你不需要它,因为 FirstOrDefault
在参数中有一个 Func
。由于 Contains
匹配请求的类型,您可以像将任何参数传递给任何其他函数一样传递 Contains
。
FirstOrDefault 的签名是:
public static TSource FirstOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
你习惯写:
var target = ListOfTabs.FirstOrDefault(x => e.Target.Location.OriginalString.Contains(x));
与
相同
Func<string, bool> predicate = x => e.Target.Location.OriginalString.Contains(x);
var target = ListOfTabs.FirstOrDefault(predicate);
与
相同
Func<string, bool> predicate = e.Target.Location.OriginalString.Contains;
var target = ListOfTabs.FirstOrDefault(predicate);
到时候可以直接传Contains
:
var target = ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
FirstOrDefault
接受一个 Func<TSource, bool>
作为参数。
通常这是一个 lambda 表达式,但由于 string.Contains
可以转换为 Func<string, bool>
,它可以直接传递给方法(假设 ListOfTabs
是 IEnumerable<string>
).
在FirstOrDefault
的执行中,会使用()
语法来实际执行string.Contains
。
FirstOrDefault
基本上将函数作为参数。写作
ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
写法几乎一样
ListOfTabs.FirstOrDefault(x => e.Target.Location.OriginalString.Contains(x));
Contains
和x => Contains(x)
都是函数,所以可以!
我有这样的代码:
string target = ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
我没有编写代码,我正在尝试了解它的作用。我看到有一个方法叫做Contains()
,但是这里不明白为什么Contains
后面没有()。这是不同的东西吗?有人可以解释这段代码的作用吗?
你不需要它,因为 FirstOrDefault
在参数中有一个 Func
。由于 Contains
匹配请求的类型,您可以像将任何参数传递给任何其他函数一样传递 Contains
。
FirstOrDefault 的签名是:
public static TSource FirstOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
你习惯写:
var target = ListOfTabs.FirstOrDefault(x => e.Target.Location.OriginalString.Contains(x));
与
相同Func<string, bool> predicate = x => e.Target.Location.OriginalString.Contains(x);
var target = ListOfTabs.FirstOrDefault(predicate);
与
相同Func<string, bool> predicate = e.Target.Location.OriginalString.Contains;
var target = ListOfTabs.FirstOrDefault(predicate);
到时候可以直接传Contains
:
var target = ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
FirstOrDefault
接受一个 Func<TSource, bool>
作为参数。
通常这是一个 lambda 表达式,但由于 string.Contains
可以转换为 Func<string, bool>
,它可以直接传递给方法(假设 ListOfTabs
是 IEnumerable<string>
).
在FirstOrDefault
的执行中,会使用()
语法来实际执行string.Contains
。
FirstOrDefault
基本上将函数作为参数。写作
ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
写法几乎一样
ListOfTabs.FirstOrDefault(x => e.Target.Location.OriginalString.Contains(x));
Contains
和x => Contains(x)
都是函数,所以可以!