2016-06-02 17 views
8

câu chuyện dài ngắn, nếu tôi làm điều này:Hội đồng có thể không có phiên bản không?

string myV = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

Will một cái gì đó bao giờ được null? Tôi đọc msdn và nó không chỉ định các phần GetName()Version.

+0

BTW: Cần đọc 'Phiên bản myV = ...', nếu không nó sẽ không biên dịch. –

+0

Sử dụng ReSharper trên 'Assembly.GetExecutingAssembly() ?. GetName() ?. Phiên bản? .Build' nó gợi ý rằng hai chữ cái đầu tiên'? 'Là thừa (tức là không thể rỗng) nhưng không phải là'? 'Cuối cùng. –

+1

@UweKeim, làm thế nào bạn có thể nhận được 'null' cho' Phiên bản'? – techspider

Trả lời

4

Phiên bản sẽ luôn ở đó.

Mỗi hội đồng có một số phiên bản như một phần của danh tính của nó.

https://msdn.microsoft.com/en-us/library/51ket42z(v=vs.110).aspx

Bằng cách này, nếu bạn đang sử dụng C# 6, trong những trường hợp tương tự khi không chắc chắn về phương pháp gì trả về, bạn nên xem xét sử dụng toán tử propogation null "?.". Bằng cách đó bạn sẽ đảm bảo rằng nó không bao giờ ném lỗi tham chiếu null.

Điều tồi tệ nhất có thể xảy ra là chuỗi kết quả sẽ là rỗng.

string myV = Assembly.GetExecutingAssembly()?.GetName()?.Version?.ToString(); 
+1

'Phiên bản sẽ luôn luôn ở đó' bạn có thể mở rộng trên đó hoặc chỉ ra một số tài liệu hoặc một cái gì đó? – Jonesopolis

+0

Vì vậy, ToString() ở cuối sẽ không bao giờ thất bại do null? Cảm ơn rất nhiều theo cách – Gaspa79

+0

Có. Kết quả sẽ chỉ là null. –

5

Đó là kỹ thuật có thể cho lĩnh vực đó để được null:

var name = Assembly.GetExecutingAssembly().GetName(); 
name.Version = null; 
Console.WriteLine(name.Version == null); // true 

Nhưng tôi không thể nghĩ ra bất cứ hoàn cảnh trong đó nó sẽ được null. Vì nó tầm thường để kiểm tra tôi chỉ cần thêm một kiểm tra rỗng và ném một ngoại lệ tùy chỉnh nếu thích hợp nếu nó null, vì việc chẩn đoán NullReferenceException có thể khó khăn vì bạn không nhận được bất kỳ dấu hiệu nào cho số những gì theo dõi ngăn xếp.

+0

Tôi hoàn toàn đồng ý với cách tiếp cận an toàn, tôi chỉ tò mò vì tôi không thể tìm thấy thông tin này ở bất kỳ đâu. – Gaspa79

+1

vì mục đích đó, bạn có thể tạo ra giá trị rỗng cho bất kỳ thứ gì. Câu hỏi là 'null' không phải bằng cách gán; nhưng bằng cách lấy từ Hội – techspider

+0

@techspider Đúng, nhưng nó là một kiểm tra tầm thường như vậy không có hại trong nó.Tôi muốn thêm hai dòng mã xác định một hoàn cảnh đặc biệt hoàn toàn hơn là phải theo dõi qua mã để chẩn đoán một 'NullReferenceException' mà _should_ không bao giờ xảy ra. –

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