最近、古い C# アプリを Visual Studio 2003 から Visual Studio 2010 に移植しました。
コード内でクリーンアップするものを探して、Resharper を実行したところ、(何度も)「[Flags] 属性でマークされていない列挙型に対するビット単位の操作」と表示されました。
たとえば、そのメッセージで「フラグを立てる」(しゃれた意図はありません) コードの一部を次に示します。
~DuckbillConverter()
{
//stop running thread
if((this.Status & ConvertStatus.Running) == ConvertStatus.Running)
this.Stop();
}
このコードはそのまま機能していると思います。それでは、R# が推奨するように、[Flags] 属性で ConvertStatus.Running を装飾することの利点 (さらに重要なことに、考えられる副作用) は何でしょうか?
アップデート
ジョン・スキートへの回答:
public enum ConvertStatus
{
/// <summary>
/// The thread is not running, there are no manual conversions or purges and no errors have occurred.
/// </summary>
Stopped = 0x0,
/// <summary>
/// The thread is running and will automatically convert all sites for both file types.
/// </summary>
Running = 0x1,
/// <summary>
/// A data conversion is currently taking place.
/// </summary>
Converting = 0x2,
/// <summary>
/// A data purge is currently taking place.
/// </summary>
Purging = 0x4,
/// <summary>
/// An error has occurred. Use the LastError property to view the error message.
/// </summary>
Error = 0x8
}