5

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

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

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

    public ModuleAction(string url, ModuleAction action)
    { ... }
}

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

ModuleAction action = new ModuleAction("http://google.co.uk", null);

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

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

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

    public ModuleAction(string url, ModuleAction action)
    { ... }
}
4

6 回答 6

12

这里有几个选项。

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

ModuleAction action = new ModuleAction("http://google.co.uk", (string)null);

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

public ModuleAction(string url) : this(url, "")
于 2013-06-14T11:21:51.750 回答
6

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

new ModuleAction(url, (string) null);

new ModuleAction(url, (ModuleAction) null);
于 2013-06-14T11:21:17.840 回答
4

您可以为此使用强制转换:

new ModuleAction("http://google.co.uk", (ModuleAction)null);
于 2013-06-14T11:21:16.027 回答
3

你有三个选择:

  1. 您可以将 null 转换为适当的类型。
  2. 您可以提供一个只接受一个参数并使用它而不是传递 null 的构造函数。
  3. 您可以使用命名参数。
于 2013-06-14T11:23:05.753 回答
2

创建一个没有第二个参数的构造函数。

public ModuleAction(string url) 
{ ... }

然后很清楚,如果无法提供第二个参数,将使用哪一个。

于 2013-06-14T11:22:06.777 回答
2

怎么样

new ModuleAction("uu", (string)null);
new ModuleAction("uu", (ModuleAction)null);

?

于 2013-06-14T11:23:29.090 回答