我正在浏览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源的这条线让我感到困惑。我不确定它是做什么的。
答案 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);
}