2012-12-17 37 views
7

Tôi chỉ tự hỏi, làm thế nào cú pháp chính xác là cho tham số refout cho đại biểu và hàm lambda nội tuyến.Func/Action đại diện với tham số/tham số tham chiếu hoặc hàm ẩn danh

đây là một ví dụ

nếu một hàm được định nghĩa là

public void DoSomething(int withValue) { } 

một đại biểu trong một chức năng có thể được tạo ra bởi

public void f() 
{ 
    Action<int> f2 = DoSomething; 
    f2(3); 
} 

thế nào là cú pháp đó, nếu chức năng ban đầu sẽ được định nghĩa là

public void DoSomething(ref int withValue) { withValue = 3; } 

Trả lời

12

Bạn cần phải xác định một loại đại biểu mới cho chữ ký phương pháp này:

delegate void RefAction<in T>(ref T obj); 

public void F() 
{ 
    RefAction<int> f2 = DoSomething; 
    int x = 0; 
    f2(ref x); 
} 

Lý do tại sao .NET Framework không bao gồm loại hình này có lẽ là bởi vì ref thông số không phải là rất phổ biến, và số lượng các loại cần thiết phát nổ nếu bạn thêm một loại đại biểu cho mỗi kết hợp có thể.

4

Bạn không thể sử dụng Action, Func<T>, hoặc được xây dựng trong các đại biểu, nhưng cần phải xác định riêng của bạn trong trường hợp này:

delegate void ActionByRef<T>(ref T value); 

Sau đó, đưa ra này, bạn có thể có:

int value = 3; 
ActionByRef<int> f2 = DoSomething; 
f2(ref value); 
Các vấn đề liên quan