这在C#或LINQ中意味着什么(()=>;)
我在翻阅杰弗里·巴勒莫的书时发现了这个语法这在C#或LINQ中意味着什么(()=>;),c#,linq,C#,Linq,我在翻阅杰弗里·巴勒莫的书时发现了这个语法 private void InitializeRepositories() { Func<IVisitorRepository> builder = () => new VisitorRepository(); VisitorRepositoryFactory.RepositoryBuilder = builder; } private void InitializeRepositories() { Func bu
private void InitializeRepositories()
{
Func<IVisitorRepository> builder = () => new VisitorRepository();
VisitorRepositoryFactory.RepositoryBuilder = builder;
}
private void InitializeRepositories()
{
Func builder=()=>新建VisitorRepository();
VisitorRepositoryFactory.RepositoryBuilder=builder;
}
它是什么意思?一般来说,它意味着一个没有参数的函数
在这个特定的示例中,它创建了一个不带参数的匿名函数,该函数返回一个新的
VisitorRepository()每次使用code>对象。()=>表示不带参数的函数。表示函数不带参数,如:
delegate() {//}
Func
表示不带参数并返回IVisitorRepository的委托。该委托的创建是一个lambda函数:
() //means no parameters
=> new VisitorRepository()// means it returns a new VisitorRepository
Func是一个不带参数且具有IVISITOR存储返回值的委托
()=>是创建匿名方法的lambda表达式
new VisitorRepository()是此匿名方法的内容
所以这一行正在创建一个委托,该委托指向一个匿名方法,该方法返回VisitorRepository的一个实例
Func<IVisitorRepository> builder = () => new VisitorRepository()
IVisitorRepository repository = VisitorRepositoryFactory.RepositoryBuilder();
在此之后,您可以使用属性调用匿名方法,该方法正在创建VisitorRepository的新实例
Func<IVisitorRepository> builder = () => new VisitorRepository()
IVisitorRepository repository = VisitorRepositoryFactory.RepositoryBuilder();
在这种情况下,存储库将是VisitorRepository的一个实例。()是放置变量的地方
Func<IVisitorRepository> builder = () => new VisitorRepository()
IVisitorRepository repository = VisitorRepositoryFactory.RepositoryBuilder();
示例:处理的常见事件类似于(发送方,args)
=>
//表示将这些参数抛出到此方法中
after=>您可以删除一行执行,如newvisitorrepositor()
或
您可以将整个函数放置为
Func<IRepository> = (sender, args) =>
{
var myObject = (SomeObject)sender;
return new VisitorReposiroty { id = myObject.SomeId };
}
Func=(发送方,参数)=>
{
var myObject=(SomeObject)发送方;
返回新的visitoreposiroty{id=myObject.SomeId};
}
正如其他人所说的,它是lambda表达式,它确实从处理特定事件的方法或函数中清除代码
一旦你读得很好,它就非常有用。语法是lambda表达式。lambda是在C#3.0中引入的,用于为委托定义匿名方法
委托是使用泛型函数定义的。因此,在这种情况下,委托的签名是:没有输入参数,只有一个类型为IVisitorRepository的输出参数
Func<IVisitorRepository> builder = () => new VisitorRepository()
IVisitorRepository repository = VisitorRepositoryFactory.RepositoryBuilder();
因此,在=>lambda数组的左侧是输入参数的名称。如果没有输入参数,只需写()。=>lambda右侧是返回输出参数的代码,在本例中为:new VisitorRepository()
我建议阅读更多关于C#中lambda表达式的内容,以充分理解这段代码。还涉及到泛型委托,因此您需要了解泛型和委托。我更喜欢Python版本的lambda:builder=lambda:VisitorRepository()
。我更喜欢javascript版本:function()VisitorRepository().我更喜欢阿隆佐·丘奇的兰姆达版本:嗯,我觉得这个问题很熟悉。。。。