2010-10-19 33 views
6

tôi có thể biên dịch mã bao gồm này:C#; tạo một đại biểu mới mà không khai báo phương thức một cách riêng biệt?

OperationDelegate myOpDelegate; 
static OperatorDefinition[] definitions ={ 
       new OperatorDefinition("+",2,3,true, new OperationDelegate(OperationAdd)), 
      }; 
delegate double OperationDelegate(double[] args); 
static double OperationAdd(double[] args) 
      { 
       return args[0] + args[1]; 
      } 

nhưng tôi nghĩ rằng mã của tôi sẽ trông sạch hơn nếu tôi có thể làm điều gì đó như thế này:

OperationDelegate myOpDelegate; 
static OperatorDefinition[] definitions ={new OperatorDefinition("+",2,3,true, new OperationDelegate({return args[0]+args[1]}))}; 
delegate double OperationDelegate(double[] args); 

vì tôi muốn xác định tất cả mọi thứ về mỗi OperatorDefinition ở một nơi duy nhất, thay vì xác định các hàm riêng biệt. Có cách nào để làm điều này trong C#?

(bất kỳ lời chỉ trích khác về mã của tôi sẽ được hoan nghênh, quá)

+1

thử biểu thức lambda ... chúng gọn gàng, gọn gàng và súc tích. – explorer

Trả lời

8

Nhìn vào phương pháp vô danh ... ví dụ này: C# - Anonymous delegate

+1

Cảm ơn; chỉ cần biết thuật ngữ "đại biểu vô danh" cho phép tôi tìm thấy rất nhiều ví dụ rất nhanh. – divider

+0

"Tôi không biết những gì tôi không biết" ~ Tôi ghét "khi tôi chạy vào đó. Rất vui khi bạn tìm thấy những gì bạn cần @divider – jcolebrand

6

Bạn có thể sử dụng biểu thức Lambda kể từ Net 3.5:

static OperatorDefinition[] definitions ={ 
    new OperatorDefinition("+",2,3,true, 
     args => args[0] + args[1]) 
    }; 

trong constructor OperatorDefinition của bạn, tham số cuối cùng nên là loại Func<double[],double>

Xem : http://msdn.microsoft.com/en-us/library/bb397687.aspx

+0

Tôi đã kết thúc bằng "OperatorDefinition (" * ", 2,4, true, delegate (double [] args) {return args [0] * args [1];}"; là – divider

+0

Đó là vấn đề về hương vị - tôi nghĩ Lambda ngắn hơn và dễ đọc hơn – Tor

+0

Cảm ơn sự giúp đỡ, nhưng liên kết đến MSDN bị cắt ngắn. – divider

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