5

Tôi có mã sau trong ứng dụng C# của mình.Cách thức DateTimeFormatInfo.CurrentInfo có thể là

DateTimeFormatInfo.CurrentInfo.DayNames 

ReSharper 7.1.1 nêu bật thực tế là DateTimeFormatInfo.CurrentInfo có thể gây ra ngoại lệ tham chiếu null.

Trong trường hợp nào sẽ xảy ra trường hợp này? Hoặc đây chỉ là một sai lầm trên phần của ReSharper tin rằng bất kỳ đối tượng có tài sản bạn truy cập nên được null kiểm tra?

Trả lời

9

ReSharper có lẽ chỉ là phân tích từ vựng ở đây và không có gì sâu hơn.

DateTimeFormatInfo là một lớp, một biến loại này có thểnull. Điều này có nghĩa là trường hợp được trả về bởi DateTimeFormatInfo.CurrentInfocó thể là tham chiếu null.

Đó là lỗi bạn đang gặp phải.

Trình chia sẻ lại không hiểu rằng phương thức đã được mã hóa sao cho phương thức đó sẽ không trả về tham chiếu null, vì vậy nó sẽ cảnh báo.

Không nhận tin nhắn từ Resharper như thánh thư ...

+0

Bạn có một điểm tuyệt vời. Tôi muốn chắc chắn rằng tôi hiểu tại sao lại như vậy. –

+0

Tôi không biết câu trả lời đúng là gì, nhưng tôi khá chắc chắn câu trả lời này là không chính xác. ReSharper là quá thông minh để chỉ gắn cờ tất cả các tình huống mà một thuộc tính trả về một tham chiếu đối tượng như là một tham chiếu null có thể có lỗi - nếu nó đã làm tất cả các chương trình sẽ nhận được hàng trăm lỗi này. Như một ví dụ truy cập cụ thể, tôi có thể chỉ ra rằng việc sử dụng DateTimeFormatInfo.InvariantInfo.DayNames không bị gắn cờ là lỗi tham chiếu null có thể. – RenniePet

+0

Ai đó nên truy vấn JetBrains để nhận được câu trả lời đúng. Có thể đó là lỗi trong phiên bản 7.1. Hoặc có thể nó có thể xảy ra đối với một số trường hợp rìa kỳ lạ mà thông tin văn hóa hiện tại đã được đặt thành một nền văn hóa do lập trình viên tạo ra mà DateTimeFormatInfo.CurrentInfo thực sự có thể trả về null. – RenniePet