私は拡張機能に少し慣れていません。私は書くのが嫌いなので、これを投稿する前に既存の回答を探しましたが、役立つと思うものは何も見当たりませんでした.
基本的に呼び出し元の列挙型に別の列挙型/フラグを追加するために呼び出すことができる Flag 属性を持つ列挙型の拡張メソッドが必要です。
誰かがこれを Int32.MinValue に反対票を投じる前に、私はかなりの量を調べましたが、「IsFlagSo-and-SoSet」とフラグの処理に関する一連の質問しか見つかりませんでしたが、単純なフラグの追加ではありませんでした。
列挙型を次のように定義しました。
[Flags]
internal enum eDiskFormat
{
None = 0x00,
_3D = 0x01,
Blu_ray_3D = 0x02,
Blu_ray = 0x04,
DigitalCopy = 0x08,
Dvd = 0x10
}
拡張子は次のように定義されました。
internal static void AddFormat(this Movie.eDiskFormat target, Movie.eDiskFormat newFormat)
{
target |= newFormat;
}
次のように呼び出したとき、結果の列挙型は Movie.eDiskFormat.Blu_ray... になると予想しました (eDiskFormat.None として初期化されました)。
m.DiskFormat.AddFormat(Movie.eDiskFormat.Blu_ray);
代わりに、結果の値は依然として eDiskFormat.None です。「this」による変数の受け渡しは、参照渡しと非常に似ていると思っていましたが、明らかに間違っています。メソッド内の値は思った通りなのですが、結果は…まあ、もう言ったかな。したがって、この質問。