Переполнение метода C # - PullRequest
       14

Переполнение метода C #

0 голосов
/ 09 января 2012
private void btnMiles_Click(object sender, EventArgs e)
{
    try
    {
        int milesless200 = int.Parse(txtMiles.Text);
        int milesmore200 = int.Parse(txtMiles200.Text);

        MilesCal workingoutmilescost = new MilesCal();
        if (milesless200 > 200)
        {
            lblMilesMorethan200.Text = "You can't enter more then 200 in the first box";
        }
        else
        {
            if (milesmore200 == 0)
            {
                 int carry = workingoutmilescost.MilesRepay(milesless200);
                 lblMilesShow.Text = carry.ToString();

            }
            else
            {
                int carry = workingoutmilescost.MilesRepay(milesless200, milesmore200);
                lblMilesShow.Text = carry.ToString();
            }
        }
        lblMilesError.Text = "No Error";
    }
    catch (FormatException fEx)
    {
        lblMilesError.Text = fEx.Message;
    }
}

Мой Определенный класс MilesCal

 class MilesCal
    {
        public int MilesRepay(int a)
        {
            int x;
            return x = (a*5)/100;
        }
        public int MilesRepay(int a, int b)
        {
            int y;
            return y = (a*5)/100 + (b*2)/100;
        }
    }

Предполагается, что этот код отображает на этикетке цену, которую водитель получает от своего вождения в 5 пунктов за первые 200 миль, а затем через 2 пункта.Я получил работающий код, но потом обнаружил, что это должно быть сделано с использованием переполнения метода.в минуту я получаю сообщение об ошибке Ошибка 1 Не удается преобразовать группу методов «ToString» в тип «string» без делегата.Вы намеревались вызвать метод?at

lblMilesShow.Text = carry.ToString;

Добавлена ​​функция ().

Теперь уловка, похоже, сработала, могу я еще раз попросить вас, ребята, разобраться с этим, потому что это, вероятно, снова простое исправление?

Ответы [ 9 ]

4 голосов
/ 09 января 2012

Попробуйте добавить скобки

lblMilesShow.Text = carry.ToString();
2 голосов
/ 09 января 2012

Остальные ответы в порядке..ToString это метод.Поэтому использование имени метода без его вызова означает, что вы передаете ссылку на группу методов, а не выполняете работу самого метода.

carry.ToString - это ссылка наФункция ToString

carry.ToString() вызывает метод ToString в экземпляре carry.


Но, на самом деле, я думаю, что вы все об этом ошибаетесь, вместо этогоимея два текстовых поля, вы должны просто указать человеку, сколько миль он проехал.И затем есть функция, которая делает эту работу за вас:

    public int MilesRepay(int miles)
    {
        return Math.Min(200, miles) * 0.05 + Math.Max(0, miles-200) * 0.02;
    }

Или что-то в этом роде ...

2 голосов
/ 09 января 2012

ToString - это метод.Вам нужно использовать скобки.Попробуйте carry.ToString();

2 голосов
/ 09 января 2012

Вам необходимо использовать carry.ToString(), включая скобки.

1 голос
/ 09 января 2012

Я предполагаю, что под

улов, кажется, срабатывает

Вы имеете в виду, что вы ловите исключение в блоке catch внизу.Если это так, я полагаю, что это может быть только исключением из одного из int.Parse -коллсов.Вы пытаетесь разобрать что-то, что не является int - возможно, пустой строкой ??

1 голос
/ 09 января 2012

Как уже сообщали другие, вы должны использовать скобки.

Объяснение сообщения об ошибке «Невозможно преобразовать группу методов« ToString »в тип без делегата» состоит в том, что имя метода без скобок обозначаетсам метод и интерпретирует его как делегат.Это не вызывает метод.Если вы хотите вызвать метод и использовать его возвращаемое значение, всегда используйте скобки!

Вы можете думать о делегате как о адресе памяти метода.(На самом деле это объект, который инкапсулирует этот адрес.)

1 голос
/ 09 января 2012

ToString - это не свойство, а метод, вызываемый в скобках

lblMilesShow.Text = carry.ToString();
1 голос
/ 09 января 2012

ToString - это метод.Вам необходимо добавить скобки после имени метода.

lblMilesShow.Text = carry.ToString();
1 голос
/ 09 января 2012
lblMilesShow.Text = carry.ToString();
...