有没有办法在2.0中做C#4.0可选参数?

时间:2011-02-15 19:21:52

标签: c# overloading

我有一个接受两个参数的方法,现在我需要传递一个额外的参数,但调用它的所有其他代码可能不会传递第三个参数。 下面是一个丑陋的黑客,但我只是不熟悉重载的过程,我们被困在.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 个答案:

答案 0 :(得分:6)

您的代码是执行此操作的标准方法;这不是一个丑陋的黑客。

但是,您应该考虑采用int?并传递null而不是-1

You can create optional parameters in C# 2 to be called from C# 4, using attributes

答案 1 :(得分:3)

方法重载错误。这正是在以前版本的框架中不支持可选参数的方式。

答案 2 :(得分:2)

尽量远离可选参数,它们是 NOT 自动重载,而是在编译时会发生指定的默认值并自动插入到调用中。

为什么这么糟糕?想象一下,如果您更改默认值并编译解决方案,但依赖解决方案不会重新编译,因此将具有旧的默认值。 可选参数有其用途,但在COM编程方面更多。

答案 3 :(得分:0)

这就是重载的方式。

有更好的方法可以做到这一点......但对于你的简单情况,它看起来并不坏。

答案 4 :(得分:0)

老实说,我认为这种做法没有错。我知道在没有可选参数的环境中,它的使用相当普遍。

答案 5 :(得分:0)

这正是我在4.0之前的任何C#中处理它的方式。您可以尝试params int[] participantIds路由,但是如果有人提供多个int,您必须能够接受多个。

答案 6 :(得分:0)

这是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个参数调用该方法