метод с тем же именем, но другим параметром - PullRequest
0 голосов
/ 05 мая 2018

Я хочу перегрузить метод, чтобы избежать дублирования кода. Как мне это сделать?

//Method 1 
    public Boolean func_e(Int32 item)
    {
        foreach (ItemUtility itemI in itemsUtilities)
        {
            if (itemI.item == item)
            {
                return true;
            }
            else if (itemI.item > item)
            {
                return false;
            }
        }
        return false;
    }


//Method 2 
    public Boolean func_e(int item)
    {
        for (int i = 0; i < itemsUtilities.Count(); i++)
        {
            if (itemsUtilities[i].item == item)
            {
                return true;
            }
            else if (itemsUtilities[i].item > item)
            {
                return false;
            }
        }
        return false;
    }

В этой ситуации я сталкиваюсь с ошибкой, ошибка:

Тип "ClassName" уже определяет член с именем "contains" с такими же типами параметров

Примечание. Код был перенесен с Java на C #. Одна из функций имеет вход «int», а другая - «integer» (для принятия нулевого значения)

Пожалуйста, может кто-нибудь помочь. Благодарный

1 Ответ

0 голосов
/ 05 мая 2018

Это важная часть вопроса:

Код перенесен с Java на C #. Одна из функций имеет вход «int», а другая - «integer» (для принятия нулевого значения)

В .NET нет прямого эквивалента java.lang.Integer, но для разрешения нулевых значений вы должны использовать int? (синоним Nullable<int>). Просто использование int и Int32 не работает, потому что они одного типа.

Так что вы можете иметь:

// Names changed to be more idiomatic, though still not great
public bool FuncE(int item)
{
    ...
}

public bool FuncE(int? item)
{
    ...
}

Все это говорит о том, что я сильно подозреваю, что вы можете реорганизовать код только в один метод, принимающий int?, и вполне возможно сделать это в одном выражении, используя LINQ. Хотя трудно сказать, чего вы пытаетесь достичь с помощью параметра int?.

...