Vì đây là một trong những kết quả hàng đầu cho "C # lambda ref" trên Google; Tôi cảm thấy tôi cần phải mở rộng các câu trả lời trên. Cú pháp đại biểu ẩn danh cũ hơn (C # 2.0) hoạt động và nó hỗ trợ các chữ ký phức tạp hơn (cũng như các bao đóng). Các đại biểu ẩn danh của Lambda và ít nhất đã chia sẻ việc thực hiện nhận thức trong phần phụ trợ của trình biên dịch (nếu chúng không giống nhau) - và quan trọng nhất, chúng hỗ trợ các bao đóng.
Những gì tôi đã cố gắng làm khi tôi thực hiện tìm kiếm, để thể hiện cú pháp:
public static ScanOperation<TToken> CreateScanOperation(
PrattTokenDefinition<TNode, TToken, TParser, TSelf> tokenDefinition)
{
var oldScanOperation = tokenDefinition.ScanOperation; // Closures still work.
return delegate(string text, ref int position, ref PositionInformation currentPosition)
{
var token = oldScanOperation(text, ref position, ref currentPosition);
if (token == null)
return null;
if (tokenDefinition.LeftDenotation != null)
token._led = tokenDefinition.LeftDenotation(token);
if (tokenDefinition.NullDenotation != null)
token._nud = tokenDefinition.NullDenotation(token);
token.Identifier = tokenDefinition.Identifier;
token.LeftBindingPower = tokenDefinition.LeftBindingPower;
token.OnInitialize();
return token;
};
}
Chỉ cần lưu ý rằng Lambdas an toàn về mặt thủ tục và toán học (vì quảng cáo giá trị ref được đề cập trước đó): bạn có thể mở một hộp giun. Hãy suy nghĩ cẩn thận khi sử dụng cú pháp này.