2016-03-21 25 views
2

Ben bir düğmeden bir yöntem (ben sadece eğlence için üzerinde çalışıyorum küçük bir golf puanlama programı) C# aşağıdaki kodla tıklayın vardır:Geçiş + = veya - C# parametre olarak =

private void btnPlus_Click(object sender, EventArgs e) 
{ 
    btnMinus.Enabled = true; 
    if (f_intHoleNumber != 18) { f_intHoleNumber += 1; } 
    if (f_intHoleNumber == 18) { btnPlus.Enabled = false; } 
    txtHoleNumber.Text = f_intHoleNumber.ToString();    
} 

Bunu yeniden düzenlemeyi ve ondan başka bir yöntem ayıklamak istiyorum, bu yüzden kodu yeniden kullanmıyorum ama bir operatöre (+ =) bir yöntemi parametre olarak iletmenin mümkün olup olmadığından emin değilim. Bu yapılabilir mi?

+0

iki yöntem oluşturun: İlk önce değerinizi artırın, ikincisi - azaltın. Problem nedir? – SeM

+2

Henüz daha basit, şu değeri iletin: 'f_intHoleNumber + = value', burada' value' '+ 1/-1'. – xanatos

cevap

4

Sanırım öyle değil. Yönteme +1 veya -1 geçirme ve ekleme veya çıkarma değeriyle çarpma. Örneğin :

public float calc(float val1, float val2, int op) 
{ 
    return val1 + op * val2; 
} 
+1

Veya "-1 * değeri" değerini girin. –

+0

Bunu hiç düşünmemiş bile. İyi anlaşma. Teşekkürler! – snapper

+0

Yardım edebildiğime sevindim. :) – Spatzenjaeger

0

ekleyerek ve sizin için çıkarılarak yapan bir yöntem geçebilir. Muhtemelen o rotaya gitmek istersiniz. Pass Method as Parameter using C#

+1

Bu bir cevaptan çok bir yorum. –

+0

Üzgünüz, fark olduğunu farketmedik. –

+0

Gerçekten bir çözüm sunmuyorsunuz, sadece bir çözümün bağlantısı. [Bu bir yorum daha.] (Http://meta.stackexchange.com/q/225370/245360) –

0

Bir int parametresini kabul eden ve bir int döndüren bir Func<int, int> geçirebilirsiniz.

private void btnPlus_Click(object sender, EventArgs e) 
{ 
    HandleHoleChange(currentHole => currentHole + 1);  
} 

private void HandleHoleChange(Func<int, int> getNextHoleFunc) 
{ 
    btnMinus.Enabled = true; 
    if (f_intHoleNumber != 18) { f_intHoleNumber = getNextHoleFunc(f_intHoldNumber); } 
    if (f_intHoleNumber == 18) { btnPlus.Enabled = false; } 
    txtHoleNumber.Text = f_intHoleNumber.ToString();   
} 
İlgili konular