C#中“class => someFunction”的含义是什么意思

时间:2015-12-15 08:31:36

标签: c#

我正在浏览EF7 code on Github并找到一条如下所示的行:

public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class => _setInitializer.Value.CreateSet<TEntity>(this);

我之前在类级别上看过这种语法,如下所示:

public class SomeClass<T> where T : class

其中T应该是类型类。但来自EF7源的这条线让我感到困惑。我不确定它是做什么的。

3 个答案:

答案 0 :(得分:5)

这是expression-bodied member,是C#6中的一种新语法。

这是一种方法,而不是财产。 C#不允许使用通用属性。

相同
public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class
{
    return _setInitializer.Value.CreateSet<TEntity>(this);
}

答案 1 :(得分:2)

这种语法确实有点令人困惑,但实际上这里的lambda构造与泛型约束无关。它只是一个 Expression-Bodied Method 碰巧有一个通用约束。

您可以将其视为:

public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class
{
    return _setInitializer.Value.CreateSet<TEntity>(this);
}

请参阅Roslyn Wiki

答案 2 :(得分:1)

这是一个名为Expression Bodied Method的C#6.0功能。

请阅读here

代码相当于:

public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class 
{
    return _setInitializer.Value.CreateSet<TEntity>(this);
}