2011-08-25 27 views
5

Tôi có hai hằng số:Constants trong .NET với String.Format

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

sau khi tôi đã quyết định để có một cơ sở liên tục trên hai:

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

Nhưng tôi nhận được biên dịch lỗi The expression being assigned to 'Constants.DateTimeFormatNormal' must be constant

Sau khi tôi cố gắng làm như vậy:

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

Nó đang làm việc với + " " + nhưng tôi vẫn thích sử dụng một cái gì đó tương tự như String.Format("{0} {1}", ....) bất kỳ suy nghĩ làm thế nào tôi có thể làm cho nó hoạt động?

Trả lời

12

Thật không may là không. Khi sử dụng từ khóa const, giá trị cần phải là một hằng số thời gian biên dịch. Reslult của String.Format không phải là một hằng số thời gian biên dịch nên nó sẽ không bao giờ hoạt động.

Bạn có thể thay đổi từ const thành readonly và đặt giá trị trong hàm tạo. Không chính xác cùng một điều ... nhưng một hiệu ứng tương tự.

+0

Chức năng gọi nói chung sẽ không hoạt động. –

+3

Bạn có thể sử dụng chỉ đọc và đặt giá trị trong khai báo biến. Nó không 'cần' để ở trong hàm tạo lớp. –

3

tôi thấy mình trong tình huống này thường xuyên và tôi kết thúc chuyển đổi nó để cái gì đó trông giống như:

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

(Hope đó là đúng, tôi là một VB.NET dev, cùng ý tưởng)

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

Public Shared ReadOnly là khá darn gần Public Const.