2013-04-02 25 views
6

mục đích của hai dấu ngoặc đơn là gì và mũi tênmục đích của việc sử dụng hai dấu ngoặc đơn trống tiếp theo mũi tên trong C# là gì

service.GetDeviceLOV =() =>

Tôi có đã cố gắng tìm ra chức năng của nó. Dưới đây là toàn bộ phương pháp được sử dụng để kiểm tra đơn vị. Hy vọng điều này giúp cung cấp cho nó bối cảnh.

//A test for GetDeviceTypes 
    [TestMethod()] 
    [HostType("Moles")] 
    public void GetDeviceTypesTest() 
    { 
     SetUpMoles(); 
     Login(); 


     service.GetDeviceLOV =() => 
     { 
      return new List<DeviceLOV>() { 

      new DeviceLOV{DeviceType = "Type 1"}, 
      new DeviceLOV{DeviceType = "Type 2"}, 
      new DeviceLOV {DeviceType = "Type 1"} 

     }; 
     }; 



     List<string> actual; 
     actual = presenter.GetDeviceTypes(); 

     Assert.AreEqual(2, actual.Count ,"actual.Count Should = 2"); 

    } 

Trả lời

7

Đây là lambda expression và được sử dụng để tạo đại biểu cho một chức năng ẩn danh.

Trong trường hợp của bạn, thuộc tính GetDeviceLOV là đại biểu trả về List<DeviceLOV> (hoặc một số giao diện được thực hiện, chẳng hạn như IEnumerable<DeviceLOV>).

Biểu thức lambda cho phép bạn viết nội tuyến "phương thức" và tạo một đại biểu từ nó và gán nó cho thuộc tính đó. Nếu không có cú pháp này, bạn sẽ cần phải tạo ra một phương pháp riêng biệt, và chỉ định một đại biểu trực tiếp, ví dụ:

private List<DeviceLOV> MakeDeviceList() 
{ 
    return new List<DeviceLOV> 
    { 
     new DeviceLOV{DeviceType = "Type 1"}, 
     new DeviceLOV{DeviceType = "Type 2"}, 
     new DeviceLOV {DeviceType = "Type 1"} 
    }; 
}; 

Sau đó, bạn muốn viết một cái gì đó như:

service.GetDeviceLOV = new Func<List<DeviceLOV>>(this.MakeDeviceList); 

Biểu thức lambda cho phép bạn viết phương thức "inline" và gán trực tiếp. Nó cũng cung cấp chức năng bổ sung (không được sử dụng trong trường hợp này) ở chỗ nó cho phép bạn tham chiếu các biến cục bộ (mà trình biên dịch sẽ biến thành một đóng), v.v.

+0

[Một chút đọc hơn tìm thấy ở đây] (http://msdn.microsoft.com/en-us/library/bb882516.aspx) –

3

Đó là hàm lambda không có đối số (đại biểu ẩn danh). Các dấu ngoặc nhọn và tất cả các mã trong chúng trên các dòng sau cũng là một phần của lambda đó.

2

Đó là một cách để tạo một ẩn danh phương pháp.
Về cơ bản, nó là đưa ra các phương pháp GetDeviceLOV một cơ thể của:

{ 
    return new List<DeviceLOV>() { 

    new DeviceLOV{DeviceType = "Type 1"}, 
    new DeviceLOV{DeviceType = "Type 2"}, 
    new DeviceLOV {DeviceType = "Type 1"} 
} 
Các vấn đề liên quan