如果不使用返回值,是否可以收到警告?

Chr*_*rdt 11 c# resharper

我有一个扩展方法,它返回一个值.在这种情况下,它应该在一个字节中设置一个特定的位:

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

返回的值需要再次分配给变量,因为我无法组合thisref:

byte myByte = 3;
myByte = myByte.SetBit(1, false);
Run Code Online (Sandbox Code Playgroud)

很容易忘记意外分配.有人可以认为,该方法直接改变了价值.

对于一个String.Replace,Resharper?/ VisualStudio?警告我,不使用纯方法返回值:

串

这在某种程度上也适用于我的方法吗?

Chr*_*rdt 6

似乎有一个Nuhar Package for Resharper Annotations

这包括一个 MustUseReturnValueAttribute

[MustUseReturnValue("Use the return value to...")]
public byte Foo()
{    
}
Run Code Online (Sandbox Code Playgroud)

正如@Kirk Woll在评论中指出的那样,也可以编写一个自定义的Roslyn Analyzer

  • `[Pure]`和`[MustUseReturnValue]`的效果非常相似.`[MustUseReturnValue]`允许指定自定义消息,但除此之外,主要区别在于语义.`[Pure]`表示该方法不会更改对象的状态(因此调用它的唯一原因是返回值).`[MustUseReturnValue]`也表示返回值很重要且应该使用,但不保证对象的状态. (2认同)