为什么不能点和矩形作为可选参数?(Why can't Point and Rectangle

2019-09-22 02:22发布

我想传递一个可选的参数传递给一个几何函数,称为offset ,这可能会或可能不会指定,但是C#不允许我做任何以下的。 有没有办法做到这一点?

  • null作为默认

    错误:System.Drawing.Point“类型“的值”,因为没有标准转换到类型不能被用作默认参数”

     public void LayoutRelative(.... Point offset = null) {} 
  • 空默认

    错误:关于“偏移”默认参数值必须是一个编译时间常数

     public void LayoutRelative(.... Point offset = Point.Empty) {} 

Answer 1:

如果您的默认值,不需要任何特殊的初始化,你不需要使用可空类型,或者创建不同的重载。 您可以使用default关键字:

public void LayoutRelative(.... Point offset = default(Point)) {}

如果你想使用可空类型,而不是:

public void LayoutRelative(.... Point? offset = null)
{
    if (offset.HasValue)
    {
        DoSomethingWith(offset.Value);
    }
}


文章来源: Why can't Point and Rectangle be used as optional parameters?