2010-11-03 30 views
1

Quelqu'un peut-il expliquer ce qui ne va pas avec la signature de méthode suivante écrite en utilisant C# 4.0?Pourquoi ne puis-je pas utiliser DateTime.MinValue et int.MinValue comme valeurs facultatives dans C# 4.0?

public void Test(string arg1 = string.Empty, DateTime arg2 = DateTime.MinValue){} 

Je comprends la différence entre « » et string.Empty en termes de compilation vérification mais sûrement la façon dont les paramètres facultatifs ont été mises en œuvre dans C# 4.0 est assez insuffisante si vous ne pouvez pas déclarer un type de valeur raisonnable Comparez le style null?

+0

Si arg2 = DateTime.MinValue, serait-ce toujours cette valeur constante? Il pourrait être redondant aux yeux du compilateur? – brumScouse

+0

Quelle est l'erreur que vous obtenez? – dotariel

+0

duplication possible de [Impossible d'utiliser String.Empty comme valeur par défaut pour un paramètre facultatif en C# - alors quel est le point?] (Http://stackoverflow.com/questions/2701314/cannot-use-string-empty-as- a-default-value-for-a-optional-parameter-in-c-sharp) – nawfal

Répondre

6

Parce que DateTime.MinValue et DateTime.MaxValue sont pas compilez constantes de temps - ils sont readonly champs qui sont initialisés au moment de l'exécution par DateTime constructeur statique de.

la différence entre const champs (qui sont des constantes de compilation) et readonly champs (qui ne sont pas): What is the difference between const and readonly?

+0

Tim, désolé, j'aurais dû être plus clair. Je comprends qu'ils ne sont pas des constantes de temps de conception mais sûrement le support de temps de conception de langage devrait être capable de considérer dynamiquement ce scénario? –

+0

Les paramètres facultatifs nécessitent que vous fournissiez des constantes de compilation. Vous devriez demander aux concepteurs de langage pourquoi, mais fondamentalement .NET ne supporte qu'un petit ensemble de types de données pour les constantes de compilation. –

0

Vous pouvez utiliser comme valeurs de paramètres que les valeurs littérales, des valeurs constantes et de nouvelles instances d'objets.