Есть ли способ сделать C # 4.0 необязательными параметрами в 2.0? - PullRequest
1 голос
/ 15 февраля 2011

У меня есть метод, который принимает два параметра, и теперь мне нужно передать дополнительный параметр, но весь другой код, который вызывает это, может не передавать этот третий параметр. ниже уродливый хак, но я просто не знаком с процессом перегрузки, и мы застряли в .NET 2.0, поэтому, пока это работает, я не могу не чувствовать его НЕПРАВИЛЬНОЕ.

   public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan)
    {
        AddPlanFunds(planNode, plan, -1);
    }
    public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan, int participantId)
    {
        planNode.PlanFunds = new CommonPlanFunds();

        // Add single class funds
        AddSingleClassFunds(planNode.PlanFunds, plan);

        // Add portfolios
        AddPortfolios(planNode.PlanFunds, plan,participantId);
    }

как мне сделать перегрузку?

спасибо!

Ответы [ 7 ]

6 голосов
/ 15 февраля 2011

Ваш код является стандартным способом сделать это; это не уродливый хак.

Однако вы должны рассмотреть вопрос о взятии int? и передаче null вместо -1.

Вы можете создать дополнительные параметры в C # 2 для вызова из C # 4, используя атрибуты .

3 голосов
/ 15 февраля 2011

Перегрузка метода не НЕПРАВИЛЬНО. Это именно тот способ сделать это в предыдущих версиях фреймворка, которые не поддерживают необязательные параметры.

2 голосов
/ 15 февраля 2011

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

Почему это плохо? Представьте, что вы измените значения по умолчанию и скомпилируете свое решение, но зависимое решение не перекомпилируется и поэтому будет иметь старые значения по умолчанию. Необязательные параметры имеют свое применение, но больше в области программирования COM.

0 голосов
/ 15 февраля 2011

Это 4.0, вы можете добавить дополнительные параметры, такие как (для 2.0, способ, который вы упомянули, правильный путь)

public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan, [Optional] int participantId) 
{
..
}

или можете указать значение по умолчанию

public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan,  int participantId = -1) 
{
..
}

Вы можете вызвать метод либо с 2 параметрами, либо с 3 параметрами

0 голосов
/ 15 февраля 2011

Именно так я и поступаю в C # до 4.0. Вы МОЖЕТЕ попробовать маршрут params int[] participantIds, но тогда вам придется принимать несколько, если кто-то предоставит более одного целого.

0 голосов
/ 15 февраля 2011

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

0 голосов
/ 15 февраля 2011

Вот как работает перегрузка.

Есть лучшие способы сделать это ... но для вашего простого случая это не выглядит плохо.

...