我正在浏览Jeffrey Palermo的书,并且遇到了这种语法。
private void InitializeRepositories()
{
Func<IVisitorRepository> builder = () => new VisitorRepository();
VisitorRepositoryFactory.RepositoryBuilder = builder;
}
这是什么意思?
答案 0 :(得分:14)
() =>
表示不带参数的lambda expression。
答案 1 :(得分:4)
通常,它表示没有参数的函数。
在这个特定的例子中,它创建了一个没有参数的匿名函数,每次都返回一个新的VisitorRepository();
对象。
答案 2 :(得分:2)
Func<IVisitorRepository>
代表一个不带参数的委托并返回一个IVisitorRepository。该委托的创建是一个lambda函数:
() //means no parameters
=> new VisitorRepository()// means it returns a new VisitorRepository
答案 3 :(得分:1)
()是放置变量的地方
处理的常见事件示例如(sender, args)
=>
//表示将这些参数抛入此方法
after =&gt;你可以删除像new VisitorRepositor()
OR
你可以放置像
这样的整个功能Func<IRepository> = (sender, args) =>
{
var myObject = (SomeObject)sender;
return new VisitorReposiroty { id = myObject.SomeId };
}
正如其他人所说的那样,它是lambda表达式,它确实清除了处理特定事件的方法或函数的代码。
一旦你读完它们就会非常有用。
答案 4 :(得分:1)
()=&gt;语法是lambda表达式。 Lambda是在C#3.0中引入的,用于为委托定义匿名方法。
使用通用Func定义委托。因此,在这种情况下,委托的签名是:没有输入参数和一个类型为IVisitorRepository的输出参数。
所以在=&gt;的左侧lambda数组是输入参数的名称。如果没有输入参数,只需write()。在=&gt;的右侧lambda是返回输出参数的代码,在本例中为:new VisitorRepository()。
我建议在C#中阅读更多关于lambda表达式的内容,以完全理解这段代码。还有一个通用代表,所以你也需要了解泛型和代表。
答案 5 :(得分:0)
这意味着函数不带参数,例如:
delegate() {//}
答案 6 :(得分:0)
Func是一个没有parmeter且具有IVisitorRepository返回值的委托。
()=&gt;是一个创建匿名方法的lambda表达式。
new VisitorRepository()是这个匿名方法的内容。
所以这一行创建了一个委托,它指向一个匿名方法,该方法返回一个VisitorRepository实例。
Func<IVisitorRepository> builder = () => new VisitorRepository()
在下一行中,将静态属性的值设置为刚刚创建的委托。
VisitorRepositoryFactory.RepositoryBuilder = builder;
在此之后,您可以使用该属性来调用匿名方法,该方法正在创建一个新的VisitorRepository实例。
IVisitorRepository repository = VisitorRepositoryFactory.RepositoryBuilder();
在这种情况下,存储库将是VisitorRepository的实例。