C# delegelerle geri alma işlevi uygulamak çalışıyorum. Temel olarak, her bir geri alma işlemini uygulayan delege listelerini tutan bir UndoStack var. Kullanıcı Düzenle: Geri Al'ı seçtiğinde, bu yığın ilk delege açılır ve onu çalıştırır. Her işlem, uygun bir geri alma temsilcisini yığına itmekten sorumludur. Sanırım "SetCashOnHand" adlı bir yöntemim var. ,C# Lambdas: Nasıl "Dereference" ertelemek için * değil *?
public void SetCashOnHand(int x) {
int coh = this.cashOnHand;
undo u =() => this.setCashOnHand(coh);
this.cashOnHand = x;
undoStack.Push(u);
}
Yani bu yöntem geri alma temsilci oluşturur operasyonu yapar ve (Başarılı varsayarak) UndoStack üzerine geri alma temsilci iter: Şuna benzer. (UndoStack, bir geri alma bağlamında undoStack.Push çağrılırsa yeterince akıllıdır; temsilci bunun yerine yineleme yığınının üzerine gider.)
Sorunum, bu .cashOnHand'i "önbelleğe almak" için biraz can sıkıcı olması. coh değişkeni. Ben sadece bunu yazmak isterdim:
undo u =() => this.setCashOnHand(this.cashOnHand);
Ama cashOnHand ait mevcut değerini almazsınız elbette
; Delegeye çağrılana kadar değeri ararken, kod hiçbir şey yapmadan rüzgarlar. Değeri, coh gibi yerel bir değişkene sokmaktan başka delege inşa ederken cashOnHand "dereference" yapabileceğim herhangi bir yolu var mı?Ben Geri Al yapmak için daha iyi yollar hakkında işitme gerçekten ilgilenmiyorum. Lütfen bu konuyu daha net bir şekilde ortaya koyabilmek için sadece bir örnek verin.
_Edit_, Undo demek istediğini varsayalım. – SLaks
Oops, haklısın. Soruyu çözdüm. –