c# - What exception should I throw and should I provide a message? -


i have situation user operation changes current status of request.

depending on current status operations possible i.e.

pending can approved or rejected or cancelled approved can 'cancel requested' 'cancel requested' can 'cancellation approved' or 'cancellation requested'

my question type of exception should raise if requested operation cannot carried out? should use inbuilt exception or should create custom exception such invalidcurrentstatusexception or such?

looking @ documentation invalidoperationexception seems prime candidate 'the exception thrown when method call invalid object's current state'.

if go second option of custom exception don't need provide message.

if use inbuilt invalidoperationexception should provide message , should message be?

update:

here's code have @ moment:

internal void cancelrequest(int requestid, int userid, string notes) {          datetime editdate = datetime.utcnow;          var request = this.findbyid(requestid, cancelrequestincludes);          if(request == null)         {             throw new argumentexception(invalidrequestmessage);         }          var currentstatus = request.leaverequeststatuses.where(s => s.iscurrent).firstordefault();          if (currentstatus.statusid == (int)requeststatuses.requestpending)         {             setnewrequeststatus(request, currentstatus, requeststatuses.cancellationapproved, userid, notes, editdate);         }         else if (currentstatus.statusid == (int)requeststatuses.requestapproved)         {             if (validapprover(request.userid, userid))             {                 setnewrequeststatus(request, currentstatus, requeststatuses.cancellationpending, userid, notes, editdate);             }             else             {                 //throw invalid approver exceptioon              }         }         else         {             //throw exception cant carry out cancellation         }          context.savechanges(); } 

you should never use exception (or subclass) control state of application, or indicate logical flow. instead should create class acts "result" in add property has "status" -- others have commented enum prime example of desirable use-case.

public enum requeststatus {     approved,     rejected,     cancelled,     unabletocarryout }  public class requestresult {     public requeststatus status { get; set; }     public string message { get; set; } } 

then pass around instance of object.


Comments