用null调用C#中的特定构造函数

用null调用C#中的特定构造函数,c#,constructor,C#,Constructor,我有一个包含多个构造函数的类,我想从另一个调用“main”,但使用null 只使用this(null)会导致编译时错误,因此我将null强制转换为另一个构造函数的类型。汇编得很好 MyClass { public MyClass(SomeType t) { } public MyClass(IList<FooType> l) : this((SomeType)null) { } } MyClass { 公共MyClass(SomeType t) { } 公

我有一个包含多个构造函数的类,我想从另一个调用“main”,但使用null

只使用
this(null)
会导致编译时错误,因此我将null强制转换为另一个构造函数的类型。汇编得很好

MyClass
{
  public MyClass(SomeType t)
  { }

  public MyClass(IList<FooType> l)
    : this((SomeType)null)
  { }
}
MyClass
{
公共MyClass(SomeType t)
{ }
公共MyClass(IList l)
:此((SomeType)null)
{ }
}
这感觉,让我们说恶心。这是正常的、普通的还是疯狂的,并且显示了类中的一个缺陷——它应该有一个空构造函数


类“大部分”需要一个
SomeType
,但很少有不需要的时候。我希望在极少数的情况下“突出”并清楚地表明代码“不是典型的”部分。

您需要强制转换,因为
null
本身是不明确的。
null
本身没有固有的类型,因此cast告诉编译器要将
null
传递给哪个构造函数


也就是说,像您所说的那样,类使用默认(无参数)构造函数可能更有意义。拥有所有三个构造函数可能也没问题。

在我看来,这似乎是一个逻辑缺陷,它会让你在未来的某个地方陷入麻烦。似乎在某个时候会编写一段代码来进行一些验证并破坏这个构造函数,您将浪费大量的时间调试它。我确实需要进一步了解你想做什么以及为什么

它确实有一点轻微的气味。有时会使用这种技术,但如果实际可行,我会避免使用

无参数构造函数通常比传递null更具描述性,如果仅在类中使用它,则可以将其设为私有:

MyClass {

  private MyClass() {
  }

  public MyClass(SomeType t) {
  }

  public MyClass(IList<FooType> l) : this() {
  }

}

将一个构造函数重定向到另一个构造函数,并将构造函数主体留空是完全正确的。但是如果不使用,为什么需要
l
参数呢?当我需要强制转换
null
时,我总是使用
as
,因为它读起来更好,感觉更不“恶心”:
null as SomeType
。我知道为什么需要强制转换-但对某些东西强制转换null似乎很奇怪,因此,我想就这种情况有多奇怪再听听我的看法。将
null
强制转换为特定类型并不罕见。这是重载方法的乐趣之一。
MyClass {

  public MyClass(SomeType t) {
  }

  public static MyClass CreateEmptyInstance() {
    return new MyClass((SomeType)null);
  }

}