2011-08-25 2 views
5

Ho due costanti:costanti in .NET con String.Format

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

dopo che ho deciso di avere un'altra base costante quei due:

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

Ma ottengo errore di compilazione The expression being assigned to 'Constants.DateTimeFormatNormal' must be constant

Dopo ho provato a fare così:

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

Funziona con + " " + ma preferisco comunque utilizzare qualcosa di simile a String.Format("{0} {1}", ....) qualsiasi idea su come posso farlo funzionare?

risposta

12

Sfortunatamente no. Quando si utilizza la parola chiave const, il valore deve essere una costante di tempo di compilazione. Il reslult di String.Format non è una costante di tempo di compilazione, quindi non funzionerà mai.

È possibile modificare da const a readonly e impostare il valore nel costruttore. Non è esatta la stessa cosa ... ma un effetto simile.

+0

Chiamare le funzioni in generale non funzionerebbe. –

+3

È possibile utilizzare readonly e impostare il valore anche nella dichiarazione delle variabili. Non ha bisogno di essere nel costruttore della classe. –

3

mi ritrovo in questa situazione, spesso e finisco convertirlo in qualcosa che assomiglia:

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

(Speranza che è di destra, io sono un dev VB.NET, stessa idea)

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

Public Shared ReadOnly è praticamente vicino a Public Const.