Vous pouvez travailler autour de cette très facilement en changeant votre signature.
void Foo(TimeSpan? span = null) {
if (span == null) { span = TimeSpan.FromSeconds(2); }
...
}
Je doit préciser la raison de ces expressions dans votre exemple ne sont pas des constantes de compilation est parce que au moment de la compilation, le compilateur ne peut pas simplement exécuter laps de Temps.FromSeconds(2.0) et coller les octets de la suite dans votre code compilé.
Considérez, par exemple, si vous avez essayé d'utiliser DateTime.Maintenant à la place. La valeur de type DateTime.Aujourd'hui les changements à chaque fois qu'il est exécuté. Ou supposons que TimeSpan.FromSeconds a pris en compte la gravité. C'est absurde, mais aussi les règles de la compilation des constantes de temps de ne pas faire de cas particuliers juste parce que nous savons que TimeSpan.FromSeconds est déterministe.