2015-12-15 11 views
7

tôi duyệt qua các EF7 code on Github và tìm thấy một dòng đó trông như thế này:gì "tài sản nơi class => someFunction" có nghĩa là trong C#

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

Tôi đã thấy cú pháp mà trước khi về mặt kĩ lớp, như thế này:

public class SomeClass<T> where T : class 

Điều gì nói rằng T phải thuộc loại lớp. Nhưng dòng từ nguồn EF7 gây nhầm lẫn cho tôi. Tôi không chắc nó làm gì.

Trả lời

5

Đây là một expression-bodied member, một cú pháp mới trong C# 6.

Đó là một phương pháp, không phải là một tài sản. C# không cho phép các thuộc tính chung chung.

Nó giống như

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

Nó không phải là một lĩnh vực hoặc phương pháp. Nó định nghĩa một thuộc tính chỉ có được – dotctor

+3

@dotctor Đó là một phương thức, không phải tài sản. Chú ý '()'. –

2

Cú pháp này hơi khó hiểu, nhưng thực ra cấu trúc lambda ở đây không liên quan gì tới các ràng buộc chung. Nó chỉ là Phương pháp biểu hiện theo phương pháp xảy ra để có một ràng buộc chung.

Bạn có thể nghĩ về nó như:

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

Xem Roslyn Wiki

1

Đó là một tính năng C# 6.0 Expression Bodied Method.

Đọc here về điều đó.

Mã này tương đương với:

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

mã của bạn sẽ không biên dịch vì hàm không trả lại bất cứ điều gì –

+0

@RajKamal - Yup, bỏ lỡ sự trở lại .. –

Các vấn đề liên quan