为什么Point和Rectangle不能用作可选参数?

时间:2012-09-02 11:37:20

标签: c# .net geometry arguments optional-parameters

我正在尝试将一个可选参数传递给名为offset的几何函数,该函数可能指定也可能未指定,但C#不允许我执行以下任何操作。有没有办法实现这个目标?

  • 默认为空

    错误:类型''的值不能用作默认参数,因为没有标准转换来键入'System.Drawing.Point'

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

    错误:'offset'的默认参数值必须是编译时常量

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

1 个答案:

答案 0 :(得分:14)

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

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

如果您想使用可空类型:

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