列挙型で何かを行い、それを返す拡張機能を取得したとしましょう。
public static T Do<T>(this Enum e) where T : struct
{
// Do something.
return // e? .. (T)e? .. or (T)(object)e? ;
}
では、この例でコードを正常にビルドして実行するには、何を返す必要がありますか。
Roles role = Roles.Admin | Roles.Moderator;
role.Do<Roles>().SomethingElse().AndMore<Roles>().Etc<int>();
__
return (T)e;
http://pasteboard.s3.amazonaws.com/images/1349685696025173.png
__
return e;
http://pasteboard.s3.amazonaws.com/images/1349685753912110.png
__
return (T)(object)e;
実際には動作しますが、ボックス化してからボックス化解除します。