2011-02-07 67 views
41

Có thể khai báo một hằng số Guid trong C# không?Làm thế nào để khai báo một hằng số Guid trong C#?

Tôi hiểu rằng tôi có thể khai báo static readonly Guid, nhưng có cú pháp cho phép tôi viết const Guid không?

+5

Có gì sai với một hướng dẫn đọc tĩnh? – Pedro

+1

Không có gì, nếu đó là cách duy nhất để làm điều đó. – smartcaveman

+1

@Pedro, một const được đánh giá tại thời gian biên dịch, một tĩnh được đánh giá tại thời gian chạy. –

Trả lời

45

No. Bộ sửa đổi const chỉ áp dụng cho các loại "nguyên thủy" (bool, int, float, double, long, decimal, short, byte) và chuỗi. Về cơ bản bất cứ điều gì bạn có thể tuyên bố như là một chữ.

+6

Nó thực sự được định nghĩa theo cách khác. Bạn có thể sử dụng 'const' cho bất kỳ giá trị thời gian biên dịch nào. C# không thực sự xác định thuật ngữ "kiểu nguyên thủy"; nó chỉ là tiếng lóng. Các ngôn ngữ khác sử dụng thực sự xác định thuật ngữ "các loại nguyên thủy" và có một danh sách cố định các loại như vậy. Trong thực tế, có một thời gian biên dịch đơn cho 'Guid', và đó là' default (Guid) '. Đó là thời gian biên dịch duy nhất cho Guid. – Servy

18

Trong khi bạn có thể dường như không làm được điều đó bạn có thể làm điều đó để được phân tích bất cứ khi nào bạn cần nó:

const string _myGuidStr = "e6b86ea3-6479-48a2-b8d4-54bd6cbbdbc5"; 

Nhưng đừng sử dụng guid trên vì nó thuộc về tôi chỉ duy nhất, đầu tiên tôi tạo ra vì vậy tôi yêu cầu quyền sở hữu đối với hướng dẫn cụ thể này ở trên! Nhưng tôi rất hào phóng - sử dụng cái này thay vào đó (tôi không thích cách nó nói lại với tôi nhưng đó là một hướng dẫn tốt đẹp khi nó đóng miệng): 284c694d-d9cc-446b-9701-b391876c8394

+8

+1, mặc dù GUID của bạn cũng đã nói chuyện với tôi. –

+7

bạn nên cân nhắc việc bán các hướng dẫn ... –

+5

@ZarShardan Chúng là một loại! –

32

Tuyên bố nó như static readonly Guid hơn const Guid

+0

Tôi tin rằng đây là câu trả lời hay nhất vì nó là câu trả lời duy nhất mà không thay đổi kết quả cuối cùng, chỉ đọc có thể được sử dụng theo cùng cách của một const, bao gồm intellisense – Raffaeu

+1

@Raffaeu: 1 từ tôi), nhưng về mặt kỹ thuật, nó thậm chí không trả lời câu hỏi ("Có thể tuyên bố một hằng số Guid trong C#?"), Cũng không giải thích về * tại sao * câu trả lời là có hay không. Nó cung cấp một cách giải quyết, nhưng không giải thích cách 'readonly' khác khác với' const', và ý nghĩa của việc sử dụng nó thay vì cái kia. Vì vậy, nó là xa những gì một "câu trả lời tốt nhất" nên như thế nào. – Heinzi

3

tôi đang làm nó như thế này:

public static class RecordTypeIds 
{ 
    public const string USERS_TYPEID = "5C60F693-BEF5-E011-A485-80EE7300C695"; 
    public static Guid Users { get { return new Guid(EntityTypeIds.USERS_TYPEID); } } 
} 
+7

bạn sẽ nhận được hiệu suất tốt hơn một chút với trường chỉ đọc thay vì thuộc tính tạo Hướng dẫn mới cho mọi truy cập – smartcaveman

+1

Tôi thích câu trả lời của bạn trừ đi thuộc tính nhận được tốt nhất. Tôi đồng ý với smartcaveman ... chỉ cần làm cho rằng một tĩnh công cộng chỉ đọc Guid. –

+1

Ohh và lý do duy nhất tôi thích điều này là tốt nhất là nó cho phép chuỗi được sử dụng trong báo cáo chuyển đổi.Tất cả những nơi khác tôi sử dụng chỉ đọc tĩnh Guid. –

19
public static readonly Guid Users = new Guid("5C60F693-BEF5-E011-A485-80EE7300C695"); 

và đó là lý đó.

+3

Đó không phải là hằng số, chỉ cần đọc là – Darius

+1

Tuy nhiên, đó là một giải pháp thay thế phù hợp. –

+3

Nó không phải là một thay thế phù hợp nếu bạn cần một cái gì đó được đánh giá tại thời gian biên dịch. –

Các vấn đề liên quan