2015-12-15 8 views
7

何をで意味があると、このような行が見つかりました:私はクラスレベルにする前に、その構文を見てきました「プロパティは、クラス=> someFunctionは」私は<a href="https://github.com/aspnet/EntityFramework/blob/dev/src/EntityFramework.Core/DbContext.cs#L826">EF7 code on Github</a>を拾い読みしていますC#

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

を、

public class SomeClass<T> where T : class 

これは、Tは、クラスタイプである必要があります。しかし、EF7ソースからのラインは私を混乱させる。私はそれが何をするか分からない。

答えて

5

を参照してください。 C#は汎用プロパティを許可しません。

それは式本体として持つメソッドと呼ばれるC#6.0の機能です

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

それは、フィールドやメソッドはありません。 – dotctor

+3

@dotctorこれはメソッドでありプロパティではありません。 '()'に注目してください。 –

2

この構文はちょっと混乱しますが、実際にはここのラムダ構造は一般的な制約とは関係ありません。普通の制約があったのはエクスプレッションボディメソッドです。あなたはと考えることができ

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

は、それはそれは方法、ない財産だexpression-bodied member、C#の6

の新しい構文ですRoslyn Wiki

1

と同じです。

hereを読んでください。

コードは同等です:

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

関数が何も返さないので、コードはコンパイルされません –

+0

@RajKamal - うん、戻りません.. –

関連する問題

 関連する問題