2012-09-02 12 views
5

Estoy tratando de pasar un argumento opcional a una función de geometría, llamada offset, que puede o no estar especificada, pero C# no me permite hacer nada de lo siguiente. ¿Hay alguna manera de lograr esto?¿Por qué no se pueden usar el Punto y el Rectángulo como parámetros opcionales?

  • Null como predeterminado

    Error: Valor de tipo '' no se puede utilizar como un parámetro por defecto porque no hay conversiones estándar para el tipo 'System.Drawing.Point'

    public void LayoutRelative(.... Point offset = null) {} 
    
  • vacío por defecto

    error: por defecto valor de parámetro para 'compensar' debe ser una constante

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

Respuesta

11

Si su valor por defecto no requiere ningún tipo especial de inicialización, que no es necesario utilizar un tipo anulable o crear diferentes sobrecargas en tiempo de compilación. Puede utilizar la palabra clave default:

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

Si desea utilizar un tipo anulable en su lugar:

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

Mostrar cómo utilizar la forma anulable y voy a aceptar su respuesta. El tipo que acaba de hacerlo borró su respuesta. –

+0

Muchas gracias. –

Cuestiones relacionadas