2015-12-15 8 views
7

sto navigando attraverso il EF7 code on Github e ha trovato una linea che assomiglia a questo:Che cosa significa "Proprietà dove class => someFunction" significa in C#

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

ho visto che la sintassi prima su un livello di classe, in questo modo:

public class SomeClass<T> where T : class 

che dice che T dovrebbe essere di classe di tipo. Ma la linea della fonte EF7 mi confonde. Non sono sicuro di cosa faccia.

risposta

5

E 'un expression-bodied member, una nuova sintassi in C# 6.

E' un metodo, non una proprietà. C# non consente proprietà generiche.

E 'lo stesso di

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

Non è un campo o un metodo. Definisce una proprietà get only – dotctor

+3

@dotctor È un metodo, non una proprietà. Si noti '()'. –

2

Questa sintassi è davvero un po 'confusa, ma in realtà il costrutto lambda non ha nulla a che fare con i vincoli generici. È solo un Expression-Bodied Method che ha un vincolo generico.

Si può pensare ad esso come:

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

Vedi Roslyn Wiki

1

E' una caratteristica C# 6.0 chiamato Espressione Corposi Metodo.

Leggi here su di esso.

Il codice è equivalente a:

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

il tuo codice non verrà compilato in quanto la funzione non restituisce nulla –

+0

@RajKamal - Yup, mancato il ritorno .. –