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

时间:2010-03-05 15:36:09

标签: c# linq

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

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

这是什么意思?

7 个答案:

答案 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的实例。