这在C#或LINQ中意味着什么? – (()=>)

我正在阅读Jeffrey Palermo的书,并且遇到了这种语法。

private void InitializeRepositories() { Func builder = () => new VisitorRepository(); VisitorRepositoryFactory.RepositoryBuilder = builder; } 

这是什么意思?

() =>表示不带参数的lambda表达式 。

通常,它表示没有参数的函数。

在这个特定的例子中,它创建了一个匿名函数,没有参数返回一个新的VisitorRepository(); 每次对象。

Func代表一个不带参数的委托并返回一个IVisitorRepository。 该委托的创建是一个lambda函数:

 () //means no parameters => new VisitorRepository()// means it returns a new VisitorRepository 

()是放置变量的地方

处理的常见事件的示例如下(sender, args)

=> //表示将这些参数抛入此方法

在=>之后你可以删除一行执行的东西,比如new VisitorRepositor()

要么

你可以放置一个完整的function

 Func = (sender, args) => { var myObject = (SomeObject)sender; return new VisitorReposiroty { id = myObject.SomeId }; } 

正如其他人所说的那样,它是lambda表达式,它确实清除了处理特定事件的方法或函数的代码。

一旦你读得好,它真的很有用。

()=>语法是lambda表达式。 Lambda在C#3.0中引入,用于为委托定义匿名方法。

委托是使用通用Func定义的。 因此,在这种情况下,委托的签名是:没有输入参数和一个类型为IVisitorRepository的输出参数。

所以在=> lambda数组的左侧是输入参数的名称。 如果没有输入参数,只需write()。 在=> lambda的右侧是返回输出参数的代码,在此示例中:new VisitorRepository()。

我建议在C#中阅读更多关于lambda表达式的内容,以完全理解这段代码。 还涉及一个通用委托,因此您还需要了解generics和代理。

Func是没有parmeter的委托,并且具有IVisitorRepository返回值。

()=>是一个创建匿名方法的lambda表达式。

new VisitorRepository()是这个匿名方法的内容。

所以这一行创建了一个委托,它指向一个匿名方法,该方法返回一个VisitorRepository实例。

 Func builder = () => new VisitorRepository() 

在下一行中,将静态属性的值设置为刚刚创建的委托。

 VisitorRepositoryFactory.RepositoryBuilder = builder; 

在此之后,您可以使用该属性来调用匿名方法,该方法正在创建VisitorRepository的新实例。

 IVisitorRepository repository = VisitorRepositoryFactory.RepositoryBuilder(); 

在这种情况下,存储库将是VisitorRepository的一个实例。

这意味着函数不带参数,例如:

 delegate() {//}