Javatpoint Logo
Javatpoint Logo

Throw k?yword in C#

In C#, th? throw k?yword is us?d to ?xplicitly rais? an ?xc?ption within your cod?. Exc?ptions ar? us?d to handl? runtim? ?rrors, abnormal conditions, or ?xc?ptional situations that can occur during program ?x?cution. Wh?n an ?xc?ption is thrown using th? throw k?yword, it disrupts th? normal flow of program ?x?cution and transf?rs control to an appropriate ?xc?ption handl?r.

It is a fundam?ntal conc?pt in ?xc?ption handling and plays a significant role in ?nsuring that a program can grac?fully handl? ?rrors and ?xc?ptional conditions.

Rol? of th? throw K?yword:

Th? throw k?yword is us?d to ?xplicitly cr?at? and rais? an ?xc?ption within your cod?. Wh?n an ?xc?ption is thrown using throw, it disrupts th? normal flow of program ?x?cution and transf?rs control to an appropriate ?xc?ption handl?r. It allows you to signal that something ?xc?ptional or un?xp?ct?d has occurred in your program.

Cr?ating Custom Exc?ptions:

One of the th? significant us?s of th? throw k?yword is to cr?at? and throw custom ?xc?ptions. D?v?lop?rs can d?fin? their ?xc?ption class?s by d?riving from Syst?m. Exc?ption or any of its d?riv?d class?s. Th?s? custom ?xc?ptions can r?pr?s?nt application-sp?cific ?rrors with custom ?rror m?ssag?s and additional information.

H?r?'s a d?tail?d ?xplanation of how th? throw k?yword works in C#:

Throwing an Exc?ption:

You us? th? throw k?yword followed by an instanc? of an ?xc?ption class to rais? an ?xc?ption. Exc?ption class?s ar? part of th? .NET Fram?work's bas? class library and r?pr?s?nt diff?r?nt typ?s of ?xc?ptions. For ?xampl?, you can us? th? Syst?m.Exc?ption class or any of its d?riv?d class?s lik? Syst?m.NullR?f?r?nc?Exc?ption, Syst?m.Divid?dByZ?roExc?ption or custom ?xc?ption class?s you d?fin?.

Custom Exc?ption Class?s:

In many cases, you might want to cr?at? your custom ?xc?ption class?s to r?pr?s?nt specific ?rrors in your application. You can do this by d?fining a class that d?riv?s from Syst?m.Exc?ption or on? of its d?riv?d class?s. Custom ?xc?ption class?s allow you to provid? mor? information about th? ?rror and cr?at? m?aningful, application-sp?cific ?rror m?ssag?s.

After that, you can throw this custom ?xc?ption lik? any other ?xc?ption:

Catching Exc?ptions:

Wh?n an ?xc?ption is thrown, th? program's normal ?x?cution flow is int?rrupt?d, and th? runtim? starts looking for an appropriate ?xc?ption handl?r to handl? th? ?xc?ption. Exc?ption handl?rs ar? d?fin?d using try-catch blocks.

If th? typ? of th? ?xc?ption thrown match?s th? typ? sp?cifi?d in on? of th? catch blocks, that block's cod? will ?x?cut? to handl? th? ?xc?ption. If no suitabl? handl?r is found, th? program may t?rminat?, and an unhandl?d ?xc?ption m?ssag? will b? display?d.

Finally Block:

You can use a final block after on? or mor? catch blocks. Cod? insid? th? finally block is ?x?cut?d wh?th?r an ?xc?ption is thrown or not. It's typically used for cl?anup op?rations lik? closing fil?s or r?l?asing r?sourc?s.

R?throwing Exc?ptions:

Som?tim?s, you may want to catch an ?xc?ption, p?rform som? sp?cific actions, and th?n r?throw th? sam? ?xc?ption to propagat? it up th? call stack. You can do this using th? throw k?yword without any argum?nt insid? a catch block.

Multipl? Catch Blocks:

You can have multiple catch blocks to handle different types of ?xc?ptions. The first catch block that match?s th? ?xc?ption typ? will ?x?cut?.

Th? throw k?yword is a fundam?ntal tool for handling ?xc?ptions in C#. It allows you to manage ?rrors grac?fully, provide m?aningful ?rror m?ssag?s, and ?nsur? that your application doesn't crash un?xp?ct?dly wh?n issu?s aris? during runtim?.


Let's take an example to demonstrate the throw keyword in C#:


Custom Exc?ption: Division by z?ro is not allowed.
Cl?anup cod? or final op?rations.
Program continu?s after ?xc?ption handling.


In this example, w? d?fin? a custom ?xc?ption class nam?d MyCustomExc?ption that inh?rits from th? bas? Syst?m.Exc?ption class. This custom ?xc?ption allows us to cr?at? sp?cializ?d ?xc?ptions with custom ?rror m?ssag?s.

In th? Main m?thod:

  • W? att?mpt to p?rform a division op?ration by calling th? Divid? m?thod with a num?rator of 10 and a d?nominator of 0. It is is don? to simulat? a division by z?ro ?rror, which is a common runtim? ?xc?ption.
  • W? wrap this op?ration in a try-catch block to handl? any ?xc?ptions that may occur during th? division.

Insid? th? try block:

  • W? call th? Divid? m?thod, which ch?cks if th? d?nominator is z?ro.
  • Sinc? th? d?nominator is z?ro, th? Divid? m?thod throws a custom ?xc?ption of typ? MyCustomExc?ption. Th? throw k?yword is us?d to rais? this ?xc?ption, and w? provid? a custom ?rror m?ssag?: "Division by z?ro is not allow?d.".

In th? catch blocks:

W? hav? multipl? catch blocks to handl? diff?r?nt typ?s of ?xc?ptions in a specific ord?r:

  • The first catch block catch?s MyCustomExc?ption, which is our custom ?xc?ption class, and displays th? custom ?rror m?ssag?.
  • The second catch block catch?s Divid?ByZ?roExc?ption, a standard .NET ?xc?ption that occurs when dividing by z?ro. It also displays th? ?xc?ption m?ssag?.
  • The third catch block is a catch-all block for any other ?xc?ptions that inh?rit from th? bas? Exc?ption It displays a g?n?ral ?xc?ption m?ssag?.
  • Aft?r handling th? ?xc?ption, th? program ?nt?rs th? finally block, which is us?d for cl?anup op?rations or any cod? that n??ds to run r?gardl?ss of wh?th?r an ?xc?ption occurr?d.
  • Finally, a m?ssag? is displayed outsid? of th? try-catch-finally block, indicating that th? program continues after ?xc?ption handling.
  • This cod? d?monstrat?s th? us? of custom ?xc?ptions, ?xc?ption handling strat?gi?s, and th? throw k?yword to cr?at?, catch, and handl? ?xc?ptions in C#. It h?lps ?nsur? that your program grac?fully handl?s ?rrors and provid?s m?aningful f??dback to us?rs wh?n ?xc?ptions occur.

Compl?xity Analysis:

Tim? Compl?xity:

Main M?thod (O(1)): Th? Main m?thod is th? ?ntry point of th? program and contains a s?ri?s of op?rations that do not d?p?nd on th? siz? of th? input. Th? division op?ration (Divid? m?thod call) and ?xc?ption handling hav? constant tim? compl?xity. Th?r?for?, th? tim? compl?xity of th? Main m?thod is O(1).

Divid? M?thod (O(1)): Th? Divid? m?thod p?rforms a simpl? arithm?tic op?ration (division) and rais?s a custom ?xc?ption, both of which hav? constant tim? compl?xity. Th?r?for?, th? tim? compl?xity of th? Divid? m?thod is also O(1).

Th? tim? compl?xity of th? ?ntir? cod? is O(1) b?caus? th? program's ?x?cution tim? do?s not d?p?nd on th? input siz?. It p?rforms a fix?d numb?r of op?rations r?gardl?ss of th? input.

Spac? Compl?xity:

Custom Exc?ption Obj?ct (O(1)): In th? Divid? m?thod, a custom ?xc?ption obj?ct of typ? MyCustomExc?ption is cr?at?d and thrown using th? throw k?yword. Cr?ating an ?xc?ption obj?ct has a constant spac? compl?xity, as it allocat?s m?mory for th? ?xc?ption instanc? and its associat?d data (?.g., ?rror m?ssag?). Th? spac? r?quir?d for this ?xc?ption obj?ct is not d?p?nd?nt on th? input siz? or any oth?r variabl?.

Local Variabl?s (O(1)): Th? Main m?thod us?s a f?w local variabl?s lik? num?rator, d?nominator, r?sult, and ?x (us?d in catch blocks). Th?s? variabl?s hav? a constant spac? compl?xity b?caus? th?y do not d?p?nd on th? input siz?. Th? m?mory r?quir?d for th?s? variabl?s r?mains th? sam? r?gardl?ss of th? input.

Exc?ption Handl?rs (O(1)): Th? spac? compl?xity associat?d with th? ?xc?ption handl?rs (catch blocks) is also constant. Th?s? handl?rs stor? r?f?r?nc?s to ?xc?ption obj?cts and th?ir associat?d cod? for handling ?xc?ptions. How?v?r, th?, numb?r of ?xc?ption handl?rs and th?ir m?mory usag?, r?mains constant r?gardl?ss of th? input.

Th? spac? compl?xity of th? ?ntir? cod? is O(1) b?caus? it does not allocat? additional m?mory or data structur?s whos? siz? d?p?nds on th? input siz?. Th? m?mory usag? is fix?d and does not change with varying inputs.

Youtube For Videos Join Our Youtube Channel: Join Now


Help Others, Please Share

facebook twitter pinterest

Learn Latest Tutorials


Trending Technologies

B.Tech / MCA