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