2016-03-21 5 views
2

У меня есть метод, с помощью кнопки мыши с помощью следующего кода в C# (маленький гольф скоринг программы я работаю просто для удовольствия):Pass + = или - = в качестве параметра в C#

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();    
} 

Я хотел бы реорганизовать это и извлечь из него еще один метод, поэтому я не повторно использую код, но я не уверен, что его можно передать оператору (+ =) в качестве параметра для метода. Это можно сделать?

+0

создать два метода: сначала увеличится ваше значение, второе - уменьшится. В чем проблема? – SeM

+2

Проще, передайте значение: 'f_intHoleNumber + = value', где' value' равно '+ 1/-1'. – xanatos

ответ

4

Я так не считаю. Что касается передачи +1 или -1 методу и умножения его на значение для добавления или вычитания. Например:

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

Или просто pas в '-1 * value'. –

+0

Никогда даже не думал об этом. Хорошая сделка. Благодаря! – snapper

+0

Я рад, что смог помочь. :) – Spatzenjaeger

0

Вы можете передать метод, который делает добавление и вычитание для вас. Вы, вероятно, захотите пойти по этому маршруту. Pass Method as Parameter using C#

+1

Это скорее комментарий, чем ответ. –

+0

Извините, не понимал, что есть разница. –

+0

Вы на самом деле не предоставляете решение, просто ссылку на решение. [Это скорее комментарий.] (Http://meta.stackexchange.com/q/225370/245360) –

0

Вы можете передать Func<int, int>, который принимает один параметр int и возвращает int.

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();   
} 
Смежные вопросы