由於這是Google上「C#lambda ref」的最佳結果之一,我覺得我需要擴展上述答案。舊的(C#2.0)匿名委託語法可以工作,並且它支持更復雜的簽名(以及閉包)。 Lambda和匿名代表至少在編譯器後端共享感知實現(如果它們不相同) - 最重要的是,它們支持閉包。
我試圖做的時候我做了搜索,展示的語法:
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;
};
}
只要記住,lambda表達式是程序上和數學上更安全(因爲前面提到的參考價值提升的):你可能會打開一罐蠕蟲。使用這種語法時要認真思考。
請問那是什麼你有解決辦法發現? – Beatles1692 2012-02-22 13:07:33
這是關於迭代器的,但是這篇文章中的許多相同的推理(畢竟他也是語言設計團隊的Eric Lippert —)適用於lambdas: –
2009-09-02 03:35:17