2011-08-25 19 views
5

que tienen dos constantes:Constantes en .NET con String.Format

public const string DateFormatNormal = "MMM dd"; 
public const string TimeFormatNormal = "yyyy H:mm"; 

después de que decidió tener otra base constante sobre los dos:

public const string DateTimeFormatNormal = String.Format("{0} {1}", DateFormatNormal, TimeFormatNormal); 

pero me da error de compilación The expression being assigned to 'Constants.DateTimeFormatNormal' must be constant

Después de que intente hacer hacer así:

public const string DateTimeFormatNormal = DateFormatNormal + " " + TimeFormatNormal; 

Está trabajando con + " " + pero todavía prefiero usar algo similar al String.Format("{0} {1}", ....) ¿Alguna idea de cómo puedo hacer que funcione?

Respuesta

12

Desafortunadamente no. Cuando se utiliza la palabra clave const, el valor debe ser una constante de tiempo de compilación. El resultado de String.Format no es una constante de tiempo de compilación, por lo que nunca funcionará.

Puede cambiar de const a readonly y establecer el valor en el constructor. No es exactamente lo mismo ... pero tiene un efecto similar.

+0

Las funciones de llamada en general no funcionarían. –

+3

Puede usar readonly y establecer el valor en la declaración de variable también. No 'necesita 'estar en el constructor de la clase. –

3

me encuentro en esta situación a menudo y me acaban de convertirlo en algo que se parece:

public static readonly string DateTimeFormatNormal = String.Format("{0} {1}", DateFormatNormal, TimeFormatNormal); 

(la esperanza de que tiene razón, yo soy un dev VB.NET, misma idea)

Public Shared ReadOnly DateTimeFormatNormal As String = String.Format("{0} {1}", DateFormatNormal, TimeFormatNormal) 

Public Shared ReadOnly está muy cerca de Public Const.