2016-04-21 28 views
8

Tôi có một phương thức mở rộng, trả về một giá trị. Trong trường hợp này nên đặt một chút cụ thể trong một byte:Có thể nhận được cảnh báo nếu giá trị trả lại không được sử dụng không?

public static byte SetBit(this byte b, int bitNumber, bool value) 
{ 
    if (value) 
    { 
     return (byte)(b | (1 << bitNumber)); 
    } 
    return (byte)(b & ~(1 << bitNumber)); 
} 

Giá trị trả lại cần phải được gán cho một biến một lần nữa, bởi vì tôi không thể kết hợp thisref:

byte myByte = 3; 
myByte = myByte.SetBit(1, false); 

Đó là dễ dàng quên việc chuyển nhượng một cách tình cờ. Ai đó có thể nghĩ, phương pháp thay đổi giá trị trực tiếp.

Đối với một số String.Replace, Resharper?/VisualStudio? được cảnh báo tôi, rằng giá trị Return of phương pháp tinh khiết không được sử dụng:

String

Đây có phải là cũng có thể cho phương pháp của tôi một cách nào đó?

+0

"Giá trị trả lại cần phải được gán cho một biến một lần nữa, bởi vì tôi không thể kết hợp điều này và ref" Really? Tôi chỉ cố gắng, và nó làm việc tốt ... –

+0

'ref byte này b' sẽ không biên dịch cho tôi @KirkWoll –

+1

Hoặc, viết một [Roslyn Analyzer] (https://github.com/dotnet/roslyn/wiki/ Cách-To-Write-aC% 23-Analyzer-and-Code-Fix) - đó là một cách tuyệt vời để thực thi các mẫu nhất định cho mã cơ sở của bạn. Bạn thậm chí có thể viết nó để nó được nhúng vào giải pháp của bạn - tuyệt vời cho các dự án cụ thể của công ty. –

Trả lời

4

Có vẻ là một gói NuGet cho Resharper Annotations

này bao gồm một MustUseReturnValueAttribute

[MustUseReturnValue("Use the return value to...")] 
public byte Foo() 
{  
} 

Như @Kirk Woll chỉ ra trong các ý kiến, nó cũng có thể viết một tùy chỉnh Roslyn Analyzer

+1

Đã chuẩn bị đăng bài tương tự, nhưng đã kiểm tra và [nó hoạt động] (http://i.stack.imgur.com/EY7nt.png) chính xác như mô tả. (Tôi đã sử dụng '[Pure]' thay vì '[MustUseReturnValue]', nhưng tôi cho rằng chúng hoạt động giống nhau) –

+2

'[Pure]' và '[MustUseReturnValue]' rất giống nhau về hiệu ứng. '[MustUseReturnValue]' cho phép chỉ định một thông điệp tùy chỉnh, nhưng khác hơn, sự khác biệt chính là ngữ nghĩa. '[Pure]' có nghĩa là phương thức không làm thay đổi trạng thái của đối tượng (vì vậy lý do duy nhất để gọi nó là giá trị trả về). '[MustUseReturnValue]' cũng có nghĩa là giá trị trả về là quan trọng và nên được sử dụng, nhưng không đảm bảo về trạng thái của đối tượng. – citizenmatt

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