10

Tôi có ứng dụng Windows 8 mà tôi bản địa hóa như được mô tả in the MSDN. Các tệp tài nguyên của tôi sử dụng tên mặc định ("Resources.resw") và các vị trí ("Strings \ en-US", v.v.).Tại sao ReSharper lại phàn nàn về việc sử dụng ResourceLoader.GetString này?

enter image description here

Khi tôi truy cập vào các nguồn tài nguyên thông qua ResourceLoader, sau đó ReSharper phàn nàn. Ví dụ:

private readonly ResourceLoader _resourceLoader = new ResourceLoader(); 

private void DoSomething() 
{ 
    string s = _resourceLoader.GetString("TestEntry"); 
} 

enter image description here

ReSharper phàn nàn rằng tôi là tạo ra một tham chiếu mơ hồ, bởi vì có một số "TestEntry" chìa khóa ở một số tập tin tài nguyên. Duh. Đó là toàn bộ vấn đề. Việc quản lý tài nguyên sẽ tự động sử dụng đúng tài nguyên, và nó thực sự.

Vậy tại sao ReSharper khiếu nại? Có phải lỗi trong ReSharper hoặc thực sự có vấn đề gì không?

Bằng cách này: ReSharper khuyến cáo (trong số những thứ khá vô dụng khác) Mời đặt resource: trước chuỗi chìa khóa, như _resourceLoader.GetString(resource: "TestEntry") (và sau đó phàn nàn rằng nó không cần thiết) . Điều này làm cho cảnh báo ReSharper biến mất. Cái đó làm cái gì? Nó là một sự cải tiến?

Edit: Oh my! Tôi bằng cách nào đó nghĩ rằng resource: là một số cú pháp đặc biệt, nhưng nó chỉ là một named method argument ...

+19

'ReSharper đề xuất ... và sau đó than phiền rằng nó thừa 'Tôi bắt đầu nghĩ Resharper trông rất giống bạn gái của tôi. –

+7

"ReSharper đề xuất (trong số những thứ khá vô ích khác) để đặt tài nguyên: trước chuỗi khóa" - không. Hãy cẩn thận phân biệt giữa [Sửa nhanh] của ReSharper (http://www.jetbrains.com/resharper/features/code_analysis.html#Quick-Fixes) và [Hành động theo ngữ cảnh] (http://www.jetbrains.com/resharper) /features/coding_assistance.html#Context_Actions) – AakashM

+0

@AakashM: Rất tiếc. Vâng, bạn nói đúng. Tôi đã chỉnh sửa câu hỏi của mình cho phù hợp. –

Trả lời

1

Thay vì xây dựng một ResourceLoader mới, hãy thử sử dụng phương thức GetForCurrentView() tĩnh để lấy ResourceLoader thích hợp.

private readonly ResourceLoader _resourceLoader = ResourceLoader.GetForCurrentView(); 

private void DoSomething() 
{ 
    string s = _resourceLoader.GetString("TestEntry"); 
} 
Các vấn đề liên quan