这在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() {//}