Establecer el valor predeterminado para DateTime en el parámetro opcional [duplicar]
Esta pregunta ya tiene una respuesta aquí:
- C # 4.0: ¿Puedo usar un intervalo de tiempo como parámetro opcional con un valor predeterminado? 8 respuestas
¿Cómo puedo establecer el valor predeterminado para DateTime en el parámetro opcional?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
6 answers
Hay una solución para esto, aprovechando los tipos nullables y el hecho de que null
es una constante en tiempo de compilación. (Es un poco de un truco sin embargo, y yo sugeriría evitar a menos que realmente no se puede.)
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
if (!addedOn.HasValue)
addedOn = DateTime.Now;
//Init codes here
}
En general, preferiría el enfoque estándar de sobrecarga sugerido en las otras respuestas:
public SomeClassInit(Guid docId)
{
SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn)
{
//Init codes here
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-13 06:28:31
Supongo que realmente no querías addedOn = DateTime.Now
porque eso sugeriría que nunca obtendrías ningún resultado, ya que todo se agregaría antes de 'Ahora'. :)
Un valor predeterminado DateTime
se puede establecer así:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
Update
Si trabaja con SQL Server, no olvide que no acepta por defecto(DateTime) lo que es 1/1/0001. La fecha y hora mínima de SQL Server es 1/1/1753 (explicación ). DateTime2 de SQL acepta 1/1/0001, sin embargo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:41
Modificaría ligeramente la solución de LukeH como:
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}
Que es más corto y más legible, parece.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-25 08:15:50
No utilice un parámetro opcional:
public SomeClassInit(Guid docId, DateTime addedOn)
{
SomeClassInitCore(docId, addedOn);
}
public SomeClassInit(Guid docId)
{
SomeClassInitCore(docId, null);
}
private SomeClassInitCore(Guid docId, DateTime? addedOn)
{
// set default value
if (addedOn.IsNull) addedOn = DateTime.Now;
//Init codes here
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-13 04:52:11
.NET 4.0 tiene parámetros opcionales. (google es también tu amigo , aquí.)
EDITAR (debido a Anthony Pegram correcto, comentario)...
Y sí, así es como lo harías.
Pero DateTime.
Ahora (propiedad estática, en esa clase) no se conoce hasta tiempo de ejecución. Como tal, no puede usar eso como un valor opcional .
. NET 3.5 no lo hace... entonces tendrías que hacer lo que JS Bangs manifestó...
public SomeClassInit(Guid docId)
{
return SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
O incluso el parámetro null checking/null value de la respuesta de munificent.
[2] Salud Anthony.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-13 05:07:40
C# no tiene parámetros opcionales en este sentido. Si desea que addedOn
sea opcional, debe escribir una sobrecarga que no requiera ese parámetro y pasar DateTime.Now
a la versión de dos argumentos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-13 04:50:41