RegexOptions[Flags]属性が適用された列挙です。これにより、ビット単位の演算をさまざまな値に適用できます。
同様のことを行うこともできます。
[Flags]
enum MyOptions {
UpperCase = 1,
Reverse = 2,
Trim = 4
}
public static void DoTransform(MyOptions options) {
if ((options & MyOptions.UpperCase) == MyOptions.UpperCase) {
/* Do Upper case transform */
}
if ((options & MyOptions.Reverse) == MyOptions.Reverse) {
/* Do Reverse transform */
}
/* etc, ... */
}
DoTransform(MyOptions.UpperCase | MyOptions.Reverse);
フランクのコメントに基づいてもう少し掘り下げたところですが、[Flags]属性の有無にかかわらず、上記のコードがコンパイルされて実行されるというのは正しいことです。
[Flags]属性が何をしないかについては他にもコメントがありますが、「結果に影響を与える」以外は、誰もそれがToString()何をするのかを知らないか、説明したくないようです。私が書いたコードでは、属性を持つビットフィールドとして使用する予定の列挙を装飾している[Flags]ので、その場合は少なくともある程度自己文書化されています。そうでなければ、私は途方に暮れています。