C#中的"Property where class => someFunction"是什么意思?

7

我正在浏览Github上的EF7代码,发现了一行看起来像这样的代码:

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

我之前在类级别上见过这种语法,就像这样:

public class SomeClass<T> where T : class

这段话意味着T应该是一个类类型。但是来自EF7源代码的这一行让我感到困惑,我不确定它的作用。

3个回答

5

这是C# 6中的一种新语法,叫做“表达式主体成员”(expression-bodied member)。

它是一个方法,而不是属性。C#不允许泛型属性。

它与以下代码等效:

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

它不是一个字段或方法。它定义了一个只读属性。 - Hamid Pourjam
3
这是一种方法,而不是属性。请注意 () - Jakub Lortz

2

这个语法确实有点令人困惑,但实际上这里的lambda构造与泛型约束无关。它只是一个恰好带有泛型约束的表达式主体方法。

你可以将其视为:

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

请参见Roslyn Wiki


1
这是一个名为“Expression Bodied Method”的C# 6.0特性。
这里阅读相关信息。
这段代码等同于:
public virtual DbSet<TEntity> Set<TEntity>() where TEntity : class 
{
    return _setInitializer.Value.CreateSet<TEntity>(this);
}

您的代码无法编译,因为该函数没有返回任何内容。 - Raj Kamal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接