.NET À©Õ¹ÊµÏÖ´úÂë class Command { public virtual void Execute() { } } class InvalidOperationException : InvalidOperationException where T : Command { public InvalidOperationException(string message) : base(message) { } // some specific information about // the command type T that threw this exception } static class CommandExtensions { public static void ThrowInvalidOperationException( this TCommand command, string message) where TCommand : Command { throw new InvalidOperationException(message); } } class CopyCommand : Command { public override void Execute() { // after something went wrong: this.ThrowInvalidOperationException("Something went wrong"); } } class CutCommand : Command { public override void Execute() { // after something went wrong: this.ThrowInvalidOperationException("Something else went wrong"); } }