Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这在C#或LINQ中意味着什么(()=>;)_C#_Linq - Fatal编程技术网

这在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()对象。

()=>
表示不带参数的函数。

表示函数不带参数,如:

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().我更喜欢阿隆佐·丘奇的兰姆达版本:嗯,我觉得这个问题很熟悉。。。。