如何在参数为null时区分重载

And*_*rew 5 c#

这似乎是我之前应该考虑的事情,但事实并非如此.似乎应该有一种现有的方法来做到这一点.

问题:假设我有一个带有几个构造函数的类

public class ModuleAction
{
    public ModuleAction(string url, string caption)
    { ... }

    public ModuleAction(string url, ModuleAction action)
    { ... }
}
Run Code Online (Sandbox Code Playgroud)

然后在其他地方,我调用其中一个构造函数,但第二个参数为null,它不知道使用哪个构造函数

ModuleAction action = new ModuleAction("http://google.co.uk", null);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我目前的解决方案是向其中一个构造函数添加一个未使用的参数,但这似乎不正确.

我的解决方案:(不漂亮)

public class ModuleAction
{
    public ModuleAction(string url, string caption, bool unused)
    { ... }

    public ModuleAction(string url, ModuleAction action)
    { ... }
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 12

这里有几种选择.

简单直接的解决方案是null在您要使用的重载中转换为参数的类型:

ModuleAction action = new ModuleAction("http://google.co.uk", (string)null);
Run Code Online (Sandbox Code Playgroud)

更好的选择是使用具有单个参数的新构造函数并使用默认值对其进行链接:

public ModuleAction(string url) : this(url, "")
Run Code Online (Sandbox Code Playgroud)

  • @TimSchmelter - 好的事情早于其中两个;) (2认同)

Meh*_*taş 6

您可以将null转换为预期的参数类型.

new ModuleAction(url, (string) null);

new ModuleAction(url, (ModuleAction) null);
Run Code Online (Sandbox Code Playgroud)