2011-08-25 13 views
5

Mam dwie stałe:Stałe w .NET z String.Format

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

po tym, jak zdecydowała się na kolejną stałą bazę na tych dwóch:

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

ale pojawia się błąd kompilacji The expression being assigned to 'Constants.DateTimeFormatNormal' must be constant

Po tym, jak spróbuję, wykonaj następujące czynności:

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

Współpracuje z + " " +, ale nadal wolę używać czegoś podobnego do String.Format("{0} {1}", ....) żadnych myśli, jak mogę to działa?

Odpowiedz

12

Niestety nie. W przypadku użycia słowa kluczowego const wartość musi być stałą czasową kompilacji. Reslult z String.Format nie jest stałą czasu kompilacji, więc nigdy nie będzie działać.

Można jednak zmienić z const na readonly i ustawić wartość w konstruktorze. Niezupełnie to samo ... ale podobny efekt.

+0

Funkcje wywołania ogólnie nie działały. –

+3

Można użyć tylko do odczytu i ustawić wartość również w deklaracji zmiennej. Nie musi "być" w konstruktorze klasy. –

3

znajdę się w takiej sytuacji często, a ja w końcu przekształcenie go do czegoś, co wygląda jak:

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

(Mam nadzieję, że ma rację, jestem VB.NET dev, sam pomysł)

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

Public Shared ReadOnly jest dość cera blisko Public Const.