<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14483960</id><updated>2011-12-15T06:39:13.020+04:00</updated><title type='text'>I See Sharp</title><subtitle type='html'>Hey there, I'm Rowan. I'm currently studying Software Engineering at UTM, and I'm also an IT Entrepreneur. This is my programming blog - you'll find loads of C# stuff in here, as well as MySQL and C tutorials with source. Comments are most welcome.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14483960.post-7242769541993257315</id><published>2007-11-01T20:09:00.000+04:00</published><updated>2011-10-17T16:53:12.097+04:00</updated><title type='text'>Roulette Implementation in C</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;Here goes the &lt;span style="font-weight: bold;"&gt;main.c&lt;/span&gt; file:&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Roulette program - by Rowan R. Jugernauth&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    File description: Main application program with entry point&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Email: rowan.rishi@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &lt;span class="str"&gt;"Menus.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//starting player balance&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; startBalance = 5000;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//maximum bet&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; maxBet = 100;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Main function of program&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; main()&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//number of players&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; numPlayers;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//All players in the game&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player players[10];&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//display the main menu&lt;/span&gt;&lt;br /&gt;DisplayMenu();&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//set the number of players&lt;/span&gt;&lt;br /&gt;numPlayers = EnterPlayers();&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//temporary variable&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//loop through the players and input their details&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i = 0; i&amp;lt;=numPlayers-1; i++)&lt;br /&gt;{&lt;br /&gt;ClrScr();&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\n\n\tPlayer %d"&lt;/span&gt;, i+1);&lt;br /&gt;players[i] = InputPlayerDetails(startBalance);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//check if the game is over for all players&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt;(!IsGameOver(players, numPlayers))&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//loop through the players and have them to play&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i = 0; i&amp;lt;=numPlayers-1; i++)&lt;br /&gt;{&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (players[i].gameOver == 0)&lt;br /&gt;        {&lt;br /&gt;             StartGame(&amp;amp;players[i]);&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//generate random number and display score&lt;/span&gt;&lt;br /&gt;Payout(&amp;amp;players, numPlayers);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//end program&lt;/span&gt;&lt;br /&gt;Quit();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//starts the game for a certain player&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; StartGame(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player * currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//reset all bets&lt;/span&gt;&lt;br /&gt;ResetPlayerBets(currentPlayer, currentPlayer-&amp;gt;balance);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//create a variable to define the user's choice    &lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; choice = -1;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; numBet = 0;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; amountBet = 0;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; totalBets = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;do&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;totalBets = CountPlayerBets(*currentPlayer);&lt;br /&gt;PrintPlayerDetails(*currentPlayer);&lt;br /&gt;choice = DisplayPlayerMenu();&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;switch&lt;/span&gt;(choice)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 0: &lt;span class="rem"&gt;//view board&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//view player bets&lt;/span&gt;&lt;br /&gt;        DrawBoard(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//wait for user to press key&lt;/span&gt;&lt;br /&gt;        getch();&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 1: &lt;span class="rem"&gt;//bet on number&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get which number the user just bet on&lt;/span&gt;&lt;br /&gt;        numBet = BetOnNumber(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get the amount the user is betting&lt;/span&gt;&lt;br /&gt;        amountBet = GetBetAmount(*currentPlayer, maxBet, currentPlayer-&amp;gt;numbers[numBet+1].bet);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;numbers[numBet+1].bet += amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;balance -= amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 2: &lt;span class="rem"&gt;//bet on red&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//display the board&lt;/span&gt;&lt;br /&gt;        BetOnRed(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get the amount the user is betting&lt;/span&gt;&lt;br /&gt;        amountBet = GetBetAmount(*currentPlayer, maxBet, currentPlayer-&amp;gt;betRed);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;betRed += amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;balance -= amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;                        &lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 3: &lt;span class="rem"&gt;//bet on black&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//display the board&lt;/span&gt;&lt;br /&gt;        BetOnBlack(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get the amount the user is betting&lt;/span&gt;&lt;br /&gt;        amountBet = GetBetAmount(*currentPlayer, maxBet, currentPlayer-&amp;gt;betBlack);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;betBlack += amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;balance -= amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 4: &lt;span class="rem"&gt;//bet on even&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//display the board&lt;/span&gt;&lt;br /&gt;        BetOnEven(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get the amount the user is betting&lt;/span&gt;&lt;br /&gt;        amountBet = GetBetAmount(*currentPlayer, maxBet, currentPlayer-&amp;gt;betEven);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;betEven += amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;balance -= amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;    &lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 5: &lt;span class="rem"&gt;//bet on odd&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//display the board&lt;/span&gt;&lt;br /&gt;        BetOnOdd(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get the amount the user is betting&lt;/span&gt;&lt;br /&gt;        amountBet = GetBetAmount(*currentPlayer, maxBet, currentPlayer-&amp;gt;betOdd);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;betOdd += amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;balance -= amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 6: &lt;span class="rem"&gt;//bet on low 18&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//display the board&lt;/span&gt;&lt;br /&gt;        BetOnLo(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get the amount the user is betting&lt;/span&gt;&lt;br /&gt;        amountBet = GetBetAmount(*currentPlayer, maxBet, currentPlayer-&amp;gt;betLo);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;betLo += amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;balance -= amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 7: &lt;span class="rem"&gt;//bet on hi 18&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//display the board&lt;/span&gt;&lt;br /&gt;        BetOnHi(*currentPlayer);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//get the amount the user is betting&lt;/span&gt;&lt;br /&gt;        amountBet = GetBetAmount(*currentPlayer, maxBet, currentPlayer-&amp;gt;betHi);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;betHi += amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//increase bet on number&lt;/span&gt;&lt;br /&gt;        currentPlayer-&amp;gt;balance -= amountBet;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 8: &lt;span class="rem"&gt;//reset bets&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//reset the player's bets&lt;/span&gt;&lt;br /&gt;        ResetPlayerBets(currentPlayer, currentPlayer-&amp;gt;balance + CountPlayerBets(*currentPlayer));&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//invalidate choice&lt;/span&gt;&lt;br /&gt;        choice = -1;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 9: &lt;span class="rem"&gt;//skip turn&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;case&lt;/span&gt; 10: &lt;span class="rem"&gt;//call exit to terminate the program&lt;/span&gt;&lt;br /&gt;        Quit();&lt;br /&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;} &lt;span class="kwrd"&gt;while&lt;/span&gt; ((choice &amp;lt; 1) || (choice &amp;gt; 10));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Generate the winning number and display the earnings&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Payout(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player (*allPlayers)[10], &lt;span class="kwrd"&gt;int&lt;/span&gt; numPlayers)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//set winning number&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; winningNum = Rand();&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Display winning information for the number&lt;/span&gt;&lt;br /&gt;DisplayWinningInfo(winningNum);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//temporary integer&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//initialize a blank array for each player's earnings&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; earnings[10] = {0,0,0,0,0,0,0,0,0,0};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//loop through the players and calculate their earnings&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i=0; i&amp;lt;=numPlayers-1; i++)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberRed(winningNum))&lt;br /&gt;{&lt;br /&gt;    earnings[i] += (*allPlayers)[i].betRed * 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberBlack(winningNum))&lt;br /&gt;{&lt;br /&gt;    earnings[i] += (*allPlayers)[i].betBlack * 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberEven(winningNum))&lt;br /&gt;{&lt;br /&gt;    earnings[i] += (*allPlayers)[i].betEven * 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberOdd(winningNum))&lt;br /&gt;{&lt;br /&gt;    earnings[i] += (*allPlayers)[i].betOdd * 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberHi(winningNum))&lt;br /&gt;{&lt;br /&gt;    earnings[i] += (*allPlayers)[i].betHi * 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberLo(winningNum))&lt;br /&gt;{&lt;br /&gt;    earnings[i] += (*allPlayers)[i].betLo * 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;earnings[i] += (*allPlayers)[i].numbers[winningNum].bet * 36;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//display all the earnings&lt;/span&gt;&lt;br /&gt;DisplayEarnings(*allPlayers, earnings, numPlayers);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//increment the player's earnings and set their game over status&lt;/span&gt;&lt;br /&gt;PayEarnings(*allPlayers, earnings, numPlayers);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;There goes the Menu.h file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Roulette program - by Rowan R. Jugernauth&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    File description: Header file which contains the menu and misc. printing functions&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Email: rowan.rishi@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &lt;span class="str"&gt;"Misc.h"&lt;/span&gt;&lt;br /&gt;#include &lt;span class="str"&gt;"Structures.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//display the welcome menu&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; DisplayMenu()&lt;br /&gt;{&lt;br /&gt;ClrScr();&lt;br /&gt;SetRGB(3);&lt;br /&gt;GotoXY(26,0);&lt;br /&gt;printf(&lt;span class="str"&gt;"=== Rowan's Roulette 1.0 ==="&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//requests the user for the number of players&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; EnterPlayers()&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; players = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt; ((players &amp;lt; 2) || (players &amp;gt; 9))&lt;br /&gt;{&lt;br /&gt; SetRGB(6);&lt;br /&gt; GotoXY(12,10);&lt;br /&gt; printf(&lt;span class="str"&gt;"Please enter the number of players [between 2 and 9]: "&lt;/span&gt;);&lt;br /&gt; SetRGB(2);&lt;br /&gt; scanf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, &amp;amp;players);&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ((players &amp;lt; 2) || (players &amp;gt; 9))&lt;br /&gt; {&lt;br /&gt;      GotoXY(12,10);&lt;br /&gt;      SetRGB(1);     &lt;br /&gt;      printf(&lt;span class="str"&gt;"\t\t\t\t\t\t\t\t[wrong]"&lt;/span&gt;); &lt;span class="rem"&gt;//clear the line and write "wrong" at the end.&lt;/span&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; players;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//input details of each player&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player InputPlayerDetails(&lt;span class="kwrd"&gt;int&lt;/span&gt; startBalance)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//create a new player&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player newPlayer;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//set the new player's game over to false&lt;/span&gt;&lt;br /&gt;newPlayer.gameOver = 0;&lt;br /&gt;&lt;br /&gt;SetRGB(6);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\tPlease enter the player's name: "&lt;/span&gt;);&lt;br /&gt;SetRGB(2);&lt;br /&gt;scanf(&lt;span class="str"&gt;"%s"&lt;/span&gt;, &amp;amp;newPlayer.name);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ResetPlayerBets(&amp;amp;newPlayer, startBalance);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; newPlayer;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Display the player's details&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; PrintPlayerDetails(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player somePlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//display the top menu&lt;/span&gt;&lt;br /&gt;DisplayMenu();&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//count the player's bet&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; sumBets = CountPlayerBets(somePlayer);&lt;br /&gt;&lt;br /&gt;SetRGB(0);&lt;br /&gt;GotoXY(60,2);&lt;br /&gt;printf(&lt;span class="str"&gt;"%s's turn"&lt;/span&gt;, somePlayer.name);&lt;br /&gt;&lt;br /&gt;SetRGB(6);&lt;br /&gt;GotoXY(60,3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Balance:"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;GotoXY(69,3);&lt;br /&gt;SetRGB(2);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, somePlayer.balance);&lt;br /&gt;&lt;br /&gt;SetRGB(6);&lt;br /&gt;GotoXY(60,4);&lt;br /&gt;printf(&lt;span class="str"&gt;"Sum Bet:"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;GotoXY(69,4);&lt;br /&gt;SetRGB(2);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, sumBets);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Display the menu intended for the player&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; DisplayPlayerMenu()&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; choice = 0;&lt;br /&gt;&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\n\t\t0. View current bets"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t1. Bet on a number (straight)"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t2. Bet on Red"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t3. Bet on Black"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t4. Bet on Even"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t5. Bet on Odd"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t6. Bet on Low-18"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t7. Bet on High-18"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t8. Clear all bets"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t9. Next player"&lt;/span&gt;);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\t\t10. Exit"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;SetRGB(6);&lt;br /&gt;printf(&lt;span class="str"&gt;"\n\n\tPlease enter a choice [0-10]: "&lt;/span&gt;);&lt;br /&gt;SetRGB(2);&lt;br /&gt;scanf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, &amp;amp;choice);&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; choice;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Asks the user to input a number to bet on&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; BetOnNumber(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//draw the board&lt;/span&gt;&lt;br /&gt;DrawBoard(currentPlayer);&lt;br /&gt;GotoXY(60,1);&lt;br /&gt;SetRGB(3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Betting on a number"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; choice = -1;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;do&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; SetRGB(2);&lt;br /&gt; GotoXY(10, 22);&lt;br /&gt; SetRGB(6);&lt;br /&gt; printf(&lt;span class="str"&gt;"Please enter a number between 0 and 36. Enter -1 for 00: "&lt;/span&gt;);&lt;br /&gt; SetRGB(2);&lt;br /&gt; scanf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, &amp;amp;choice);&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ((choice &amp;lt; -1 ) || (choice &amp;gt; 36))&lt;br /&gt; {&lt;br /&gt;     SetRGB(1);&lt;br /&gt;     GotoXY(10,22);&lt;br /&gt;     printf(&lt;span class="str"&gt;"\t\t\t\t\t\t\t\t[wrong]"&lt;/span&gt;); &lt;span class="rem"&gt;//clear the line and write "wrong" at the end&lt;/span&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;} &lt;span class="kwrd"&gt;while&lt;/span&gt;((choice &amp;lt; -1 ) || (choice &amp;gt; 36));&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; choice;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//User is betting on red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; BetOnRed(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//draw the board&lt;/span&gt;&lt;br /&gt;DrawBoard(currentPlayer);&lt;br /&gt;&lt;br /&gt;GotoXY(60,1);&lt;br /&gt;SetRGB(3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Betting on red"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//User is betting on red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; BetOnBlack(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//draw the board&lt;/span&gt;&lt;br /&gt;DrawBoard(currentPlayer);&lt;br /&gt;&lt;br /&gt;GotoXY(60,1);&lt;br /&gt;SetRGB(3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Betting on black"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//User is betting on red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; BetOnEven(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//draw the board&lt;/span&gt;&lt;br /&gt;DrawBoard(currentPlayer);&lt;br /&gt;&lt;br /&gt;GotoXY(60,1);&lt;br /&gt;SetRGB(3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Betting on even"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//User is betting on red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; BetOnOdd(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//draw the board&lt;/span&gt;&lt;br /&gt;DrawBoard(currentPlayer);&lt;br /&gt;&lt;br /&gt;GotoXY(60,1);&lt;br /&gt;SetRGB(3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Betting on odd"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//User is betting on red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; BetOnLo(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//draw the board&lt;/span&gt;&lt;br /&gt;DrawBoard(currentPlayer);&lt;br /&gt;&lt;br /&gt;GotoXY(60,1);&lt;br /&gt;SetRGB(3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Betting on low-18"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//User is betting on red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; BetOnHi(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//draw the board&lt;/span&gt;&lt;br /&gt;DrawBoard(currentPlayer);&lt;br /&gt;&lt;br /&gt;GotoXY(60,1);&lt;br /&gt;SetRGB(3);&lt;br /&gt;printf(&lt;span class="str"&gt;"Betting on high-18"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Asks the user to input a bet amount&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; GetBetAmount(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer, &lt;span class="kwrd"&gt;int&lt;/span&gt; maxBet, &lt;span class="kwrd"&gt;int&lt;/span&gt; currentBet)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; balance = currentPlayer.balance;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; betAmount = -1;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;do&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; SetRGB(0);&lt;br /&gt; GotoXY(10, 22);&lt;br /&gt; printf(&lt;span class="str"&gt;"\t\t\t\t\t\t\t\t"&lt;/span&gt;); &lt;span class="rem"&gt;//clear the line&lt;/span&gt;&lt;br /&gt; GotoXY(10, 22);&lt;br /&gt; printf(&lt;span class="str"&gt;"Amount already placed: %d"&lt;/span&gt;, currentBet);&lt;br /&gt; SetRGB(2);&lt;br /&gt; GotoXY(10, 23);&lt;br /&gt; printf(&lt;span class="str"&gt;"\t\t\t\t\t\t\t\t"&lt;/span&gt;); &lt;span class="rem"&gt;//clear the line&lt;/span&gt;&lt;br /&gt; GotoXY(10, 23);&lt;br /&gt; SetRGB(6);&lt;br /&gt; printf(&lt;span class="str"&gt;"Please enter a bet amount between 0 and %d: "&lt;/span&gt;, maxBet);&lt;br /&gt; SetRGB(2);&lt;br /&gt; scanf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, &amp;amp;betAmount);&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (betAmount &amp;gt; balance || betAmount &amp;gt; maxBet || (betAmount+currentBet &amp;gt; maxBet))&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; ((betAmount+currentBet) &amp;gt; maxBet)&lt;br /&gt;     {&lt;br /&gt;         GotoXY(10, 24);&lt;br /&gt;         printf(&lt;span class="str"&gt;"\t\t\t\t\t\t\t\t"&lt;/span&gt;);&lt;br /&gt;         GotoXY(10, 24);&lt;br /&gt;         SetRGB(1);&lt;br /&gt;         printf(&lt;span class="str"&gt;"This amount unfortunately exceeds the maximum bet."&lt;/span&gt;);&lt;br /&gt;     }&lt;br /&gt;     &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (betAmount &amp;gt; balance)&lt;br /&gt;     {&lt;br /&gt;         GotoXY(10, 24);&lt;br /&gt;         printf(&lt;span class="str"&gt;"\t\t\t\t\t\t\t\t"&lt;/span&gt;); &lt;span class="rem"&gt;//clear the line&lt;/span&gt;&lt;br /&gt;         GotoXY(10, 24);&lt;br /&gt;         SetRGB(1);&lt;br /&gt;         printf(&lt;span class="str"&gt;"This amount unfortunately exceeds your balance."&lt;/span&gt;);&lt;br /&gt;     }&lt;br /&gt;     getch();&lt;br /&gt; }     &lt;br /&gt;&lt;br /&gt;} &lt;span class="kwrd"&gt;while&lt;/span&gt; ((betAmount &amp;lt; 0) || (betAmount &amp;gt; balance) || (betAmount+currentBet &amp;gt; maxBet));&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; betAmount;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Draw the board and display all of a player's bets&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; DrawBoard(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player currentPlayer)&lt;br /&gt;{&lt;br /&gt;ClrScr();&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; curX = 10;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; curY = 5;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 2;&lt;br /&gt;&lt;br /&gt;GotoXY(20, 2);&lt;br /&gt;SetRGB(2);&lt;br /&gt;printf(&lt;span class="str"&gt;"00"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;GotoXY(30, 2);&lt;br /&gt;printf(&lt;span class="str"&gt;"0"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;SetRGB(0);&lt;br /&gt;GotoXY(20, 3);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.numbers[0].bet &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;printf(&lt;span class="str"&gt;"$%d"&lt;/span&gt;, currentPlayer.numbers[0].bet);&lt;br /&gt;&lt;br /&gt;GotoXY(30, 3);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.numbers[1].bet &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;printf(&lt;span class="str"&gt;"$%d"&lt;/span&gt;, currentPlayer.numbers[1].bet);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt; (i &amp;lt;= 37)&lt;br /&gt;{&lt;br /&gt; GotoXY(curX, curY);&lt;br /&gt; SetRGB(2);&lt;br /&gt; printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;,currentPlayer.numbers[i].&lt;span class="kwrd"&gt;value&lt;/span&gt;-1);&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.numbers[i].color == &lt;span class="str"&gt;'r'&lt;/span&gt;)&lt;br /&gt; {&lt;br /&gt;      SetRGB(1);&lt;br /&gt;      printf(&lt;span class="str"&gt;"[R]"&lt;/span&gt;);&lt;br /&gt; }&lt;br /&gt; &lt;span class="rem"&gt;//else&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;//{&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;//    SetRGB(5);&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;//    printf("[B]");&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;//}    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.numbers[i].bet &amp;gt; 0)&lt;br /&gt; {&lt;br /&gt;      SetRGB(9);&lt;br /&gt; }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;      SetRGB(0);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; GotoXY(curX, curY+1);&lt;br /&gt; printf(&lt;span class="str"&gt;"$%d"&lt;/span&gt;,currentPlayer.numbers[i].bet);&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (curX &amp;lt; 50)&lt;br /&gt; {&lt;br /&gt;     curX += 10;&lt;br /&gt; }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;     curX = 10;&lt;br /&gt;     curY += 2;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; i++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SetRGB(2);&lt;br /&gt;GotoXY(60, 5);&lt;br /&gt;printf(&lt;span class="str"&gt;"HI Bets: "&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.betHi &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;GotoXY(75, 5);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, currentPlayer.betHi);&lt;br /&gt;&lt;br /&gt;SetRGB(2);&lt;br /&gt;GotoXY(60, 6);&lt;br /&gt;printf(&lt;span class="str"&gt;"LO Bets: "&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.betLo &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;GotoXY(75, 6);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, currentPlayer.betLo);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SetRGB(2);&lt;br /&gt;GotoXY(60, 7);&lt;br /&gt;printf(&lt;span class="str"&gt;"RED Bets: "&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.betRed &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;GotoXY(75, 7);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, currentPlayer.betRed);&lt;br /&gt;&lt;br /&gt;SetRGB(2);&lt;br /&gt;GotoXY(60, 8);&lt;br /&gt;printf(&lt;span class="str"&gt;"BLACK Bets: "&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.betBlack &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;GotoXY(75, 8);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, currentPlayer.betBlack);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SetRGB(2);&lt;br /&gt;GotoXY(60, 9);&lt;br /&gt;printf(&lt;span class="str"&gt;"EVEN Bets: "&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.betEven &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;GotoXY(75, 9);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, currentPlayer.betEven);&lt;br /&gt;&lt;br /&gt;SetRGB(2);&lt;br /&gt;GotoXY(60, 10);&lt;br /&gt;printf(&lt;span class="str"&gt;"ODD Bets: "&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (currentPlayer.betOdd &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;  SetRGB(9);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;  SetRGB(0);&lt;br /&gt;}&lt;br /&gt;GotoXY(75, 10);&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, currentPlayer.betOdd);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//displays information about winning number&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; DisplayWinningInfo(&lt;span class="kwrd"&gt;int&lt;/span&gt; winningNumber)&lt;br /&gt;{&lt;br /&gt;winningNumber -= 1;&lt;br /&gt;&lt;br /&gt;ClrScr();&lt;br /&gt;GotoXY(22,8);&lt;br /&gt;SetRGB(5);&lt;br /&gt;printf(&lt;span class="str"&gt;"And the winning number is... "&lt;/span&gt;);&lt;br /&gt;SetRGB(2);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (winningNumber == -1)&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"00!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"%d!"&lt;/span&gt;, winningNumber);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;GotoXY(20,10);&lt;br /&gt;SetRGB(0);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberRed(winningNumber))&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"\n\t\tWinning number is Red!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberBlack(winningNumber))&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"\n\t\tWinning number is Black!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberEven(winningNumber))&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"\n\t\tWinning number is Even!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberOdd(winningNumber))&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"\n\t\tWinning number is Odd!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberHi(winningNumber))&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"\n\t\tWinning number is Hi!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsNumberLo(winningNumber))&lt;br /&gt;{&lt;br /&gt; printf(&lt;span class="str"&gt;"\n\t\tWinning number is Lo!"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Display each player's earnings&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; DisplayEarnings(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player (*allPlayers)[10], &lt;span class="kwrd"&gt;int&lt;/span&gt; earnings[10], &lt;span class="kwrd"&gt;int&lt;/span&gt; numPlayers)&lt;br /&gt;{&lt;br /&gt;ClrScr();&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;&lt;br /&gt;&lt;br /&gt;GotoXY(33,2);&lt;br /&gt;printf(&lt;span class="str"&gt;"Player Scores"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;SetRGB(5);&lt;br /&gt;GotoXY(10,6);&lt;br /&gt;printf(&lt;span class="str"&gt;"Player Name"&lt;/span&gt;);&lt;br /&gt;GotoXY(30,6);&lt;br /&gt;printf(&lt;span class="str"&gt;"Old Balance"&lt;/span&gt;);&lt;br /&gt;GotoXY(45,6);&lt;br /&gt;printf(&lt;span class="str"&gt;"Earnings"&lt;/span&gt;);&lt;br /&gt;GotoXY(60,6);&lt;br /&gt;printf(&lt;span class="str"&gt;"New Balance"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; curY = 7;&lt;br /&gt;&lt;br /&gt;SetRGB(5);&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i = 0; i&amp;lt;=numPlayers-1; i++)&lt;br /&gt;{&lt;br /&gt; SetRGB(0);&lt;br /&gt;&lt;br /&gt; GotoXY(10, curY);&lt;br /&gt; printf(&lt;span class="str"&gt;"%s"&lt;/span&gt;, (*allPlayers)[i].name);&lt;br /&gt;&lt;br /&gt; SetRGB(0);&lt;br /&gt;&lt;br /&gt; GotoXY(30, curY);&lt;br /&gt; printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, (*allPlayers)[i].balance);&lt;br /&gt;&lt;br /&gt; SetRGB(0);&lt;br /&gt;&lt;br /&gt; GotoXY(45, curY);&lt;br /&gt; printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, earnings[i]);&lt;br /&gt;&lt;br /&gt; SetRGB(2);&lt;br /&gt;&lt;br /&gt; GotoXY(60, curY);&lt;br /&gt; printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, earnings[i]+(*allPlayers)[i].balance);&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ((*allPlayers)[i].balance + earnings[i] &amp;lt;= 0)&lt;br /&gt; {&lt;br /&gt;      SetRGB(1);&lt;br /&gt;      GotoXY(70, curY);&lt;br /&gt;      printf(&lt;span class="str"&gt;"GAME OVER"&lt;/span&gt;);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; curY++;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;getch();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the Misc.h file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    File description: Miscelleaneous functions&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Most functions are foreign implementations of useful functions&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Email: rowan.rishi@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Clear the screen&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; ClrScr()&lt;br /&gt;{&lt;br /&gt;system(&lt;span class="str"&gt;"CLS"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//THIS IS NOT CODE FROM ME. I COPIED THAT FROM THE NET&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//go to specific coordinates on the screen &lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; GotoXY(&lt;span class="kwrd"&gt;int&lt;/span&gt; x, &lt;span class="kwrd"&gt;int&lt;/span&gt; y)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; HANDLE hStdout = NULL;&lt;br /&gt;COORD coord;&lt;br /&gt;&lt;br /&gt;coord.X = x;&lt;br /&gt;coord.Y = y;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(!hStdout)&lt;br /&gt;{&lt;br /&gt;hStdout = GetStdHandle(STD_OUTPUT_HANDLE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SetConsoleCursorPosition(hStdout,coord);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//THIS IS NOT CODE FROM ME. I COPIED THAT FROM THE NET&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Set text and background colors.&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; SetRGB(&lt;span class="kwrd"&gt;int&lt;/span&gt; color)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;switch&lt;/span&gt; (color)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 0:    &lt;span class="rem"&gt;// White on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 1:    &lt;span class="rem"&gt;// Red on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_RED);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 2:    &lt;span class="rem"&gt;// Green on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_GREEN);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 3:    &lt;span class="rem"&gt;// Yellow on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_RED | FOREGROUND_GREEN);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 4:    &lt;span class="rem"&gt;// Blue on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 5:    &lt;span class="rem"&gt;// Magenta on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_RED | FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 6:    &lt;span class="rem"&gt;// Cyan on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_GREEN | FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 7:    &lt;span class="rem"&gt;// Black on Gray&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     BACKGROUND_INTENSITY);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 8:    &lt;span class="rem"&gt;// Black on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 9:    &lt;span class="rem"&gt;// Red on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |&lt;br /&gt;     FOREGROUND_RED);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 10: &lt;span class="rem"&gt;// Green on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |&lt;br /&gt;     FOREGROUND_GREEN);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 11: &lt;span class="rem"&gt;// Yellow on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |&lt;br /&gt;     FOREGROUND_RED | FOREGROUND_GREEN);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 12: &lt;span class="rem"&gt;// Blue on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |&lt;br /&gt;     FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 13: &lt;span class="rem"&gt;// Magenta on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |&lt;br /&gt;     FOREGROUND_RED | FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 14: &lt;span class="rem"&gt;// Cyan on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |&lt;br /&gt;     FOREGROUND_GREEN | FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; 15: &lt;span class="rem"&gt;// White on White&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |&lt;br /&gt;     FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;default&lt;/span&gt; : &lt;span class="rem"&gt;// White on Black&lt;/span&gt;&lt;br /&gt; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |&lt;br /&gt;     FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);&lt;br /&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//generate a random number between 0 and 37&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Rand()&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; ( (rand() % (38)));&lt;br /&gt;&lt;span class="rem"&gt;//return 1;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//method to quit program&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Quit()&lt;br /&gt;{&lt;br /&gt;ClrScr();&lt;br /&gt;SetRGB(2);&lt;br /&gt;GotoXY(12, 10);&lt;br /&gt;printf(&lt;span class="str"&gt;"By Rowan R. Jugernauth. Email: "&lt;/span&gt;);&lt;br /&gt;SetRGB(0);&lt;br /&gt;printf(&lt;span class="str"&gt;"rowan.rishi@gmail.com"&lt;/span&gt;);&lt;br /&gt;getch();&lt;br /&gt;exit(0);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And finally, the structures.h file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Roulette program - by Rowan R. Jugernauth&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    File description: Contains structures and codes to deal with those structures&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    Email: rowan.rishi@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Defining a casino number&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Number&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//value of number&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//bet value&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; bet;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//red, black or green&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;char&lt;/span&gt; color;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Defining a casino player&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//player's name&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;char&lt;/span&gt; name[32];&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//player's balance&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; balance;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//player's game status&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; gameOver;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//All numbers in the game&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Number numbers[38];&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//amount bet on hi&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; betHi;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//amount bet on lo&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; betLo;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//amount bet on red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; betRed;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//amount bet on black&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; betBlack;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//amount bet on even&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; betEven;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//amount bet on odd&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; betOdd;&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//initialize variables&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; InitNumbers(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player * somePlayer)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//temporary counter;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; counter;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//set the first number to -1. This actually represents 00&lt;/span&gt;&lt;br /&gt;somePlayer-&amp;gt;numbers[0].&lt;span class="kwrd"&gt;value&lt;/span&gt; = -1;&lt;br /&gt;somePlayer-&amp;gt;numbers[0].color = &lt;span class="str"&gt;'g'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[0].bet = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//loop through the numbers and reset their bets&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (counter = 1; counter&amp;lt;=37; counter++)&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//numbers[counter].bet = 250;&lt;/span&gt;&lt;br /&gt; somePlayer-&amp;gt;numbers[counter].&lt;span class="kwrd"&gt;value&lt;/span&gt; = counter;&lt;br /&gt; somePlayer-&amp;gt;numbers[counter].bet = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//set the color for each roulette color&lt;/span&gt;&lt;br /&gt;somePlayer-&amp;gt;numbers[0].color = &lt;span class="str"&gt;'g'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[1].color = &lt;span class="str"&gt;'g'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[2].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[3].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[4].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[5].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[6].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[7].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[8].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[9].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[10].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[11].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[12].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[13].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[14].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[15].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[16].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[17].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[18].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[19].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[20].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[21].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[22].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[23].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[24].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[25].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[26].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[27].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[28].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[29].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[30].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[31].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[32].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[33].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[34].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[35].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[36].color = &lt;span class="str"&gt;'b'&lt;/span&gt;;&lt;br /&gt;somePlayer-&amp;gt;numbers[37].color = &lt;span class="str"&gt;'r'&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//reset all bets&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; ResetPlayerBets(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player *newPlayer, &lt;span class="kwrd"&gt;int&lt;/span&gt; startBalance)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//initialize the player's start balance&lt;/span&gt;&lt;br /&gt;newPlayer-&amp;gt;balance = startBalance;&lt;br /&gt;InitNumbers(newPlayer);&lt;br /&gt;newPlayer-&amp;gt;betBlack = 0;&lt;br /&gt;newPlayer-&amp;gt;betRed = 0;&lt;br /&gt;newPlayer-&amp;gt;betEven = 0;&lt;br /&gt;newPlayer-&amp;gt;betHi = 0;&lt;br /&gt;newPlayer-&amp;gt;betLo = 0;&lt;br /&gt;newPlayer-&amp;gt;betOdd = 0;&lt;br /&gt;newPlayer-&amp;gt;betEven = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//counts all of a pleyer's bets&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; CountPlayerBets(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player player)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; sum = 0;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//sum bets for others&lt;/span&gt;&lt;br /&gt;sum += player.betHi;&lt;br /&gt;sum += player.betLo;&lt;br /&gt;sum += player.betBlack;&lt;br /&gt;sum += player.betEven;&lt;br /&gt;sum += player.betOdd;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//sum bets for other numbers&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i = 0; i&amp;lt;=37; i++)&lt;br /&gt;{&lt;br /&gt; sum += player.numbers[i].bet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//return sum&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; sum;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//checks whether all players are ga&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; IsGameOver(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player players[10], &lt;span class="kwrd"&gt;int&lt;/span&gt; numPlayers)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; overCount = 0;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i = 0; i&amp;lt;=numPlayers-1; i++)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (players[i].gameOver == 1)&lt;br /&gt; {&lt;br /&gt;     overCount++;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; (overCount == numPlayers);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//sets all players to game-over&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; SetAllGameOver(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player * players[10], &lt;span class="kwrd"&gt;int&lt;/span&gt; numPlayers)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i= 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i=0; i&amp;lt;=numPlayers-1; i++)&lt;br /&gt;{&lt;br /&gt; players[i]-&amp;gt;gameOver = 1;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//method to check if a number is red&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; IsNumberRed(&lt;span class="kwrd"&gt;int&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player tempPlayer;&lt;br /&gt;InitNumbers(&amp;amp;tempPlayer);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (tempPlayer.numbers[number+1].color == &lt;span class="str"&gt;'r'&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 1;&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//method to check if a number is black&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; IsNumberBlack(&lt;span class="kwrd"&gt;int&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player tempPlayer;&lt;br /&gt;InitNumbers(&amp;amp;tempPlayer);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (tempPlayer.numbers[number+1].color == &lt;span class="str"&gt;'b'&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 1;&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//method to check if a number is even&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; IsNumberEven(&lt;span class="kwrd"&gt;int&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//check if numbers aren't 00 and 0&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (number &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//check if even&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ((number % 2) &amp;gt; 0)&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt; }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 1;&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;} &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//method to check if a number is odd&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; IsNumberOdd(&lt;span class="kwrd"&gt;int&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//check if numbers aren't 00 and 0&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (number &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//check if odd&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ((number % 2) &amp;gt; 0)&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 1;&lt;br /&gt; }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;} &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//method to check if a number is hi&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; IsNumberHi(&lt;span class="kwrd"&gt;int&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//check if numbers aren't 00 and 0&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (number &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//check if odd&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (number &amp;gt;= 18)&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 1;&lt;br /&gt; }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;}&lt;br /&gt;}    &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//method to check if a number is lo&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; IsNumberLo(&lt;span class="kwrd"&gt;int&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//check if numbers aren't 00 and 0&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (number &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//check if odd&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (number &amp;lt; 18)&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 1;&lt;br /&gt; }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//pay the earnings and set each player's game over status&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; PayEarnings(&lt;span class="kwrd"&gt;struct&lt;/span&gt; Player (*allPlayers)[10], &lt;span class="kwrd"&gt;int&lt;/span&gt; earnings[10], &lt;span class="kwrd"&gt;int&lt;/span&gt; numPlayers)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i = 0; i&amp;lt;=numPlayers-1; i++)&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//if the player isn't game over yet&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ((*allPlayers)[i].gameOver == 0)&lt;br /&gt; {&lt;br /&gt;     (*allPlayers)[i].balance += earnings[i];&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;//set the player's game over status if balance zero or less&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; ((*allPlayers)[i].balance &amp;lt;= 0)&lt;br /&gt;     {&lt;br /&gt;         (*allPlayers)[i].gameOver = 1;&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'trebuchet ms';"&gt;Please let me know if there are any bugs or corrections to be made!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'trebuchet ms';"&gt;Cheers,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'trebuchet ms'; font-weight: bold;"&gt;Rowan&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-7242769541993257315?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/7242769541993257315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=7242769541993257315&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/7242769541993257315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/7242769541993257315'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2007/11/roulette-implementation-in-c.html' title='Roulette Implementation in C'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-1017187531726554760</id><published>2006-09-26T03:20:00.000+04:00</published><updated>2006-09-26T03:57:16.778+04:00</updated><title type='text'>Connecting MySQL and C#</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;I wrote an &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://iseesharp.blogspot.com/2005/09/mysql-with-c.html"&gt;article&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; on how you can connect MySQL to C# a while back. I thought it'd be interesting to give you guys a "better" article on how this can be done, with more theory and examples.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;MySQL is quite cool if you don't have huge amounts of data to handle - and it's free. To better understand this tutorial, you'll need:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;1. MySQL Server&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;2. MySQL Administrator&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;3. MySQL Connector .net&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;MySQL Server&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;MySQL Server is the real thing. It's the core of the database and is accessible after install through the command line. The MySQL server, by default, is a service running in the background. If you cannot connect to the MySQL server, check whether it's running in your services list.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;MySQL Administrator&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The MySQLAdministrator can be freely downloaded at the MySQL website. It helps you create and manage databases as well as tables with a graphical user interface. Yes. No console and commands bullshit - a few clicks and you'll be rolling with your own database and tables. If you're having problems to connect to the MySQL Administrator, note that:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The &lt;span style="font-weight: bold;"&gt;Server Host&lt;/span&gt; should be set to the machine-name or IP where your MySQL Server is located (if you installed it on your own pc, it's localhost).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The &lt;span style="font-weight: bold;"&gt;Username&lt;/span&gt; is root&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The &lt;span style="font-weight: bold;"&gt;Password&lt;/span&gt; is the password you specified during install. Blank if you didn't specify any or wasn't even asked for one and...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The &lt;span style="font-weight: bold;"&gt;Port &lt;/span&gt;is 3306, unless you specified something else during install.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;The MySQL Connector .Net&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;This tool is also freely available for downloading from the MySQL website. It's a DLL that you should add as reference in your C# project. The DLL is located under your &lt;span style="font-style: italic;"&gt;%programfiles%\MySQL\MySQL Connector Net 1.0.4\bin\.NET 1.1\MySql.Data.dll&lt;/span&gt;, unless you specified something else during install.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Your First C# Program That Uses MySQL&lt;/span&gt;&lt;br /&gt;Right. You've installed the MySQL server, the MySQL Administrator and the MySQL Connector. What you need to do is create a new console application, and add a reference to MySQL's connector (normally located under &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-style: italic;"&gt;%programfiles%\MySQL\MySQL Connector Net 1.0.4\bin\.NET 1.1\MySql.Data.dll&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;).&lt;br /&gt;&lt;br /&gt;Opening and closing the connection is easy, now that you've added the reference:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; MySql.Data.MySqlClient;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ConsoleApplication1&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; ConnectToMySQL&lt;br /&gt;{&lt;br /&gt;    [STAThread]&lt;br /&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;//create a MySQL connection with a query string&lt;/span&gt;&lt;br /&gt;        MySqlConnection connection = &lt;span class="kwrd"&gt;new&lt;/span&gt; MySqlConnection(&lt;span class="str"&gt;"server=localhost;database=cs;uid=root;password=abcdaaa"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//open the connection&lt;/span&gt;&lt;br /&gt;        connection.Open();&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//close the connection&lt;/span&gt;&lt;br /&gt;        connection.Close();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Note that the format of the SQL query string is as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span&gt;server=&lt;span style="font-weight: bold;"&gt;$servername$&lt;/span&gt;;database=&lt;span style="font-weight: bold;"&gt;$databasename$&lt;/span&gt;;uid=&lt;span style="font-weight: bold;"&gt;$username$&lt;/span&gt;;password=&lt;span style="font-weight: bold;"&gt;$password$&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Where &lt;span style="font-weight: bold;"&gt;$servername$&lt;/span&gt; is the name of the machine where your MySQL Server is running (localhost if it's on your own machine) and &lt;span style="font-weight: bold;"&gt;$databasename$&lt;/span&gt; the name of your database (or catalog, as some call it), &lt;span style="font-weight: bold;"&gt;$username$ &lt;/span&gt;a user which is allowed to access the database you selected and &lt;span style="font-weight: bold;"&gt;$password$&lt;/span&gt; the password of the user. For the dickheads who are too lazy to write their own connection strings, here goes a method which should generate good connection strings for you:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;       &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Generates a connection string for lazy bastards&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="server"&amp;gt;The name or IP of the machine where the MySQL server is running&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="databaseName"&amp;gt;The name of the database (catalog)&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="user"&amp;gt;The user id - root if there are no new users which have been created&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="pass"&amp;gt;The user's password&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CreateConnStr(&lt;span class="kwrd"&gt;string&lt;/span&gt; server, &lt;span class="kwrd"&gt;string&lt;/span&gt; databaseName, &lt;span class="kwrd"&gt;string&lt;/span&gt; user, &lt;span class="kwrd"&gt;string&lt;/span&gt; pass)&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="rem"&gt;//build the connection string&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;string&lt;/span&gt; connStr = &lt;span class="str"&gt;"server="&lt;/span&gt; + server + &lt;span class="str"&gt;";database="&lt;/span&gt; + databaseName + &lt;span class="str"&gt;";uid="&lt;/span&gt; +&lt;br /&gt;             user + &lt;span class="str"&gt;";password="&lt;/span&gt; + pass + &lt;span class="str"&gt;";"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;         &lt;span class="rem"&gt;//return the connection string&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;return&lt;/span&gt; connStr;&lt;br /&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;This method generates a connection string that you can use in the MySQLConnection object constructor. The console application, with the new added method to generate the Connection String now looks like this:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; MySql.Data.MySqlClient;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ConsoleApplication1&lt;br /&gt;{&lt;br /&gt;   &lt;span class="kwrd"&gt;class&lt;/span&gt; ConnectToMySQL&lt;br /&gt;   {&lt;br /&gt;       [STAThread]&lt;br /&gt;       &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="rem"&gt;//generate the connection string&lt;/span&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;string&lt;/span&gt; connStr = CreateConnStr(&lt;span class="str"&gt;"localhost"&lt;/span&gt;, &lt;span class="str"&gt;"cs"&lt;/span&gt;, &lt;span class="str"&gt;"root"&lt;/span&gt;, &lt;span class="str"&gt;"abcdaa"&lt;/span&gt;);&lt;br /&gt;          &lt;br /&gt;           &lt;span class="rem"&gt;//create a MySQL connection with a query string&lt;/span&gt;&lt;br /&gt;           MySqlConnection connection = &lt;span class="kwrd"&gt;new&lt;/span&gt; MySqlConnection(connStr);&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//open the connection&lt;/span&gt;&lt;br /&gt;           connection.Open();&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//close the connection&lt;/span&gt;&lt;br /&gt;           connection.Close();&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// Generates a connection string for lazy bastards&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;param name="server"&amp;gt;The name or IP of the machine where the MySQL server is running&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;param name="databaseName"&amp;gt;The name of the database (catalog)&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;param name="user"&amp;gt;The user id - root if there are no new users which have been created&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;param name="pass"&amp;gt;The user's password&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CreateConnStr(&lt;span class="kwrd"&gt;string&lt;/span&gt; server, &lt;span class="kwrd"&gt;string&lt;/span&gt; databaseName, &lt;span class="kwrd"&gt;string&lt;/span&gt; user, &lt;span class="kwrd"&gt;string&lt;/span&gt; pass)&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="rem"&gt;//build the connection string&lt;/span&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;string&lt;/span&gt; connStr = &lt;span class="str"&gt;"server="&lt;/span&gt; + server + &lt;span class="str"&gt;";database="&lt;/span&gt; + databaseName + &lt;span class="str"&gt;";uid="&lt;/span&gt; +&lt;br /&gt;               user + &lt;span class="str"&gt;";password="&lt;/span&gt; + pass + &lt;span class="str"&gt;";"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//return the connection string&lt;/span&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;return&lt;/span&gt; connStr;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;However, all we're doing is to connect and disconnect from the MySQL server without adding or taking out data. If you want to know more about how to do this, read &lt;a href="http://iseesharp.blogspot.com/2005/09/mysql-with-c.html"&gt;this article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, for those who want to deal with single inverted commas in MySQL and block SQL injection attacks, here are a few solutions for you:&lt;br /&gt;&lt;br /&gt;1. Replace all single inverted commas by two single inverted commas.&lt;br /&gt;2. Replace all single inverted commas by a slash and then the inverted comma.&lt;br /&gt;3. Convert the inverted comma (and any other character that is not "normal") into its HTML-ASCII equivalent before adding it into the database.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-1017187531726554760?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/1017187531726554760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=1017187531726554760&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/1017187531726554760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/1017187531726554760'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2006/09/connecting-mysql-and-c.html' title='Connecting MySQL and C#'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-6692784857361276800</id><published>2006-09-26T03:06:00.000+04:00</published><updated>2006-09-26T03:19:33.232+04:00</updated><title type='text'>Increase Array Bounds in C#</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;It's been a long time since I posted anything useful on this blog. I recently looked up the list of things people were looking for before falling onto this blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Increase Array Bounds in C#&lt;br /&gt;&lt;/span&gt;For those of you who are new to C#, let me quickly sum this up: don't use arrays unless you're absolutely and positively certain that the array you're using will never use more than the number of values you created it for. Use an array for the number of days. Use an array of 8 bits to hold a byte. Use an array of 12 for the number of months. Those are values that we're absolutely sure will never change.&lt;br /&gt;&lt;br /&gt;If you ever need to increase the size of an array somewhere in your code - you had it wrong. Use the &lt;span style="font-weight: bold; font-style: italic;"&gt;ArrayList&lt;/span&gt; from the System.Collection namespace, or &lt;span style="font-weight: bold; font-style: italic;"&gt;List &lt;/span&gt;System.Collections.Generic if you're on .Net 2.0 to create and use dynamic arrays.&lt;br /&gt;&lt;br /&gt;Here's some sample code for you to have fun with:&lt;/span&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//create an arraylist to hold some values&lt;/span&gt;&lt;br /&gt;           ArrayList myList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//add a few values to the arraylist&lt;/span&gt;&lt;br /&gt;           myList.Add(10);&lt;br /&gt;           myList.Add(11);&lt;br /&gt;           myList.Add(8);&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//value to hold the sum of the values&lt;/span&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;int&lt;/span&gt; sum = 0;&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//sum the values in the arraylist&lt;/span&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i &lt;span class="kwrd"&gt;in&lt;/span&gt; myList)&lt;br /&gt;           {&lt;br /&gt;               sum += i;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//display the sum&lt;/span&gt;&lt;br /&gt;           Console.WriteLine(sum.ToString());&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-6692784857361276800?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/6692784857361276800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=6692784857361276800&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/6692784857361276800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/6692784857361276800'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2006/09/increase-array-bounds-in-c.html' title='Increase Array Bounds in C#'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112958946967043684</id><published>2005-10-18T00:08:00.000+04:00</published><updated>2005-10-18T02:51:09.746+04:00</updated><title type='text'>How I Began Coding</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Here's the incredible story of how I began coding ~&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I remember my dad coming home with this dark gray box that would flip open - a laptop. That was something quite expensive to have during that time. I was only 5 years old, and the year was 1990. He was working as a photograph-reporter for the Mauritian Sun newspaper, and the laptop belonged to his office. I don't remember much from the computer itself, but I do remember Shamush, and BASICA.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;My dad taught me my first program.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;       Hello, What is your name? &lt;/span&gt;&lt;span style="font-style: italic; font-family: trebuchet ms;"&gt;ROWAN&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;        Hello ROWAN&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;Fascinating. The ability to make the computer do what I wanted it to do. A few months later, my dad brought home a few books on BASICA. I wasn't reading it - I could barely understand English. I was just copying the examples and executing them. I started by faithfully copying down the code and then ended up modifying almost every number I could find. Thousands became millions, hundreds became zeroes. I just loved it.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;Windows 95 was out, and my cousin and myself were hooked up on F1GP on my uncle's PC. And on QBasic as well. My cousin Ashvin was two years older than I was, and he had learnt quite a few tricks in programming. I could write a few stuff in QBasic as well, but I couldn't go far without the QBasic Help. I was 10-11, and I started to learn about variables. I was awed to hear about the existence of Arrays, and I heard about compilation. Compiling - the ability to make your own executables. I never wrote any useful program during that time, but I learnt a few batch-file tricks from my cousin.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I eventually ended up with my own PC in 1998, and I was off writing useless programs in QBasic. I barely understood the concepts of programming, and I hadn't heard about algorithms yet. &lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I met Arvind during that time. We were in school together, and we became friends. He was the batch-file genius. He had devised countless ways to include programs in batch files and make everything work together. To bad ends. He was mostly up to replacing the good old &lt;/span&gt;&lt;span style="font-style: italic; font-family: trebuchet ms;"&gt;win.com&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; by funny programs.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;For the last time in my programming marathon, my dad intervened. He had bought a PC-Format magazine, which contained the full version of Borland Delphi 1. I tried it out, and fell in love with it. The help was pretty bad, but I managed to get a few working examples here and there. I was now working with forms, without having the slightest idea of what an object was, nor about Windows API calls. And the best thing about it was that I could create my own executables! Perfect!&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;Pretty soon, Arvind got his own copy of Delphi and stopped trying to replace win.com with other things. We were off to write **real** programs.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I eventually ended up with a modem and 56k internet. That was where I started to learn about characters, boolean values, methods, and also loops.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I don't know what went through Arvind's head, but he signed me up for a programming competition. He told the teacher that I was "good". Nope, I wasn't good at all, and I still hadn't tried writing complicated algorithms. I spent some time learning the real pascal, but still failed miserably in the competition, while Arvind got himself a bronze medal.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;The competition was organised by the DCDM business school, and they held a programming bootcamp for all the participants of their previous competition. That was where I got taught everything I missed in programming. The bootcamp was also the place where I met Dimple, who would become my good friend later on. She was the cutest thing I had ever seen at 16, and the gleaming gold medal she had previously won had left me speechless.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;After the training camp, Arvind taught me about pointers. I couldn't really understand the purpose of it all, but I still managed to make my own linked list. After a few weeks of practise, I made my own binary tree without any help on Pascal. I was getting better at coding.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;The competition was held again the next year and I came out sixth with a silver medal. The first four guys were going to be sent to the IOI which was being organised in Finland, and there was a training camp which was being organised for them at the DCDM Business school. I was one of the replacement team members, which allowed me to follow Vik Nuckchady and Sarita Hardin's programming lessons along with the other better guys.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;The guy who came out first was barely as tall as myself, with his hair in all directions and a fucked up sense of humour. Dominique. That was where I met him, although we didn't really become friends at that time. &lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;Programming was becoming more and more part of my life with every passing day. I had learnt about API calls, performance and memory optimization and a whole host of programming tricks designed to mainly impress your friends.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;The programming competition was held again the next year. I was 17, Arvind 19, and Dominique 18. The day before, Arvind had taught me about the 8-Queen problem, and surprisingly enough, it came out as the final question of the competition. I came out third, Dom first (as usual), and Arvind got himself a silver medal. We were trained and sent off to the IOI which was being held in South Korea.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I became friends with Dom in Korea. None of us earned anything at all, but we were still glad to have participated. I lent Dom one of my books on Delphi, and after a few months, he became the Delphi expert.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;He introduced me to OOP, although I didn't really like the concept. Most of my programs were still straightforward - I would usually kick in everything in one object, never instantiating or destroying anything at all. I kept this style of coding until we found a job.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;Dom called me up one day, saying that he got an interview for a job for the both of us. I was 18, and Dom 19. The interview went fine, and we were told that we would receive about 8 months of training before we began working on solid projects.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;The guy who trained us was also our CTO - Cuan brown - or Q. Although I was barely awake in Q's classes, I must admit that he did raise me from the level of n00b to something of a programmer. Q's training wasn't focused only on programming; he was constantly kicking our asses to get us to write good professional code. I was still a Delphi coder during that time, but Cuan (through brutal and sadomaschistic means) made me like C#. This blog, my .NET projects, the programs that I wrote and that are currently running in background, my ASP and ASP.NET pages and even some of the porn I leeched all exist thanks to Q. He kicked my ass and made me work with ASP, forced me to work with CSS and helped me with most of my web-related work. Nowadays, most of the code that I write would bear this faint italicized trace: Q's shoe in my butt while he was exclaiming:&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;div style="text-align: center; font-family: trebuchet ms;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;"Fucking Muppets Need Fucking Training"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112958946967043684?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112958946967043684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112958946967043684&amp;isPopup=true' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112958946967043684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112958946967043684'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/10/how-i-began-coding.html' title='How I Began Coding'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112836568024407712</id><published>2005-10-03T22:13:00.000+04:00</published><updated>2005-10-04T10:22:21.370+04:00</updated><title type='text'>Arrays in C# and C</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Arrays&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:trebuchet ms;font-size:85%;"  &gt;[Static Arrays in C and C#]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I never pictured myself writing a tutorial on arrays but here we are - a tutorial on arrays. I'm basically writing this because we just did arrays at uni (C programming language, duh), and a few of my friends came sort of late (and some of them went to the outing) and couldn't understand fuck at all on what the whole deal was about with arrays.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Arrays. I read about arrays when I was 12. It was a Q-Basic tutorial. I still remember, it was saying something like "picture arrays like boxes" ... well anyway, never mind the way you're picturing arrays, let me just start with a small intro on data and arrays.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Please keep in mind that this is a C# blog; the C language and its construct is outside the scope of this blog. However, because I own and maintain this thing, I do pretty much whatever I want with it. You will notice that arrays in C and C# are somewhat similar. Actually, the concept of Arrays remains the same throughout all programming languages. Except ASM and VB. ASM coz you have to write your own shit and deal with it, and VB coz you prolly need to write a poem for the compiler to give you an array. No, well, it's the same in VB too :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Intro&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Useful programs need to be fed data to be processed. At some point or the other, it might happen that we need a large amount of the same type of data to hold stuff. Example, if you wanted to hold the salary of 10 employees - you could do something like:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C and C# Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee1;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee2;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee3;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee4;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee5;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee6;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee7;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee8;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee9;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employee10;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;But that's not really neat-looking. I mean, what if you had 10,000 employees? Heh, that would sort of suck, wouldn't it? Arrays provide a simpler way of storing large amounts of data. You can declare, in one line:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employees[9];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;C# Code&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Employees = &lt;span class="kwrd"&gt;new &lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[9];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Declaring an array of of length 9 (int[9] in C# and variableName[9] in C) would be the same as declaring 10 integer elements. Why does an array with accessor [9] have 10 elements? Simple - because an array's elements start with 0.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C and C# Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;Employees[0];    &lt;span class="rem"&gt;//Employee 1&lt;/span&gt;&lt;br /&gt;Employees[1];    &lt;span class="rem"&gt;//Employee 2&lt;/span&gt;&lt;br /&gt;Employees[2];    &lt;span class="rem"&gt;//Employee 3&lt;/span&gt;&lt;br /&gt;Employees[3];    &lt;span class="rem"&gt;//Employee 4&lt;/span&gt;&lt;br /&gt;Employees[4];    &lt;span class="rem"&gt;//Employee 5&lt;/span&gt;&lt;br /&gt;Employees[5];    &lt;span class="rem"&gt;//Employee 6&lt;/span&gt;&lt;br /&gt;Employees[6];    &lt;span class="rem"&gt;//Employee 7&lt;/span&gt;&lt;br /&gt;Employees[7];    &lt;span class="rem"&gt;//Employee 8&lt;/span&gt;&lt;br /&gt;Employees[8];    &lt;span class="rem"&gt;//Employee 9&lt;/span&gt;&lt;br /&gt;Employees[9];    &lt;span class="rem"&gt;//Employee 10&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Assigning Values To Arrays&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Assigning a value to an array is pretty simple. We can do this:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employees[4];&lt;br /&gt;&lt;br /&gt;Employees[0] = 2400;&lt;br /&gt;Employees[1] = 2100;&lt;br /&gt;Employees[2] = 3050;&lt;br /&gt;Employees[3] = 2400;&lt;br /&gt;Employees[4] = 3380;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C# Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Employees = &lt;span class="kwrd"&gt;new &lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[4];&lt;br /&gt;&lt;br /&gt;Employees[0] = 2400;&lt;br /&gt;Employees[1] = 2100;&lt;br /&gt;Employees[2] = 3050;&lt;br /&gt;Employees[3] = 2400;&lt;br /&gt;Employees[4] = 3380;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-family:trebuchet ms;"&gt;There is, however, an easier way of assigning values in an array. Here goes the code:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employees[4] = {2400,2100,3050,2400,3380};&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;C# Code&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt; int&lt;/span&gt;[] Employees = {2400,2100,3050,2400,3380};&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Arrays just make the world easier for us. However, behaviour of arrays on C and other programming languages are sort of different. While most modern languages have bounds checking for arrays, C doesn't. For those who have no clue what bounds checking is about - it's just checking whether someone is trying to access an array's elements outside of its specified bounds. You can access the 5th element in an array of 50 items, but you can't access the 1000th element in that same array. In C#, if you try such a thing, an exception will be thrown. In C, nothing will happen - your program will continue to execute, although you'll now have weird garbage data which was used. &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Example:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Employees[4] = {2400,2100,3050,2400,3380};&lt;br /&gt;printf(&lt;span class="str"&gt;"%d"&lt;/span&gt;, Employees[50]); &lt;span class="rem"&gt;//Will Output Garbage Data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;C# Code&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Employees = {2400,2100,3050,2400,3380};&lt;br /&gt;Console.WriteLine(Employees[50].ToString()); &lt;span class="rem"&gt;//Will Raise an Exception&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;While the above C example will run without bitchin' you, C# will give you a System.IndexOutOfRangeException - which is a kind way of saying you fucked up on the array's bounds. C# does check if your code is straying outside the bouds of an array, while C doesn't. It just applies a formula which calculates the memory location of the designated element in the array, reads the memory location, and returns you the result. Voila. You'll have to deal with it by writing proper code, that's all. While dealing with arrays, if you ever end up with garbage data (e.g. an element of array of int returning you -244324 instead of a plain 0), you'll know that you fucked up with the bounds somewhere in your code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here's the deal: You can write programs fast in C#, but your programs will consume more processing power, and might eat up more memory space. In C, writing programs is like anal sex, but the programs will run like Beep-Beep with its ass on fire.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Anyway, let's get on with arrays. You can create an array of any type. An array of characters, an array of integers, an array of float - whatever you can think of. The arrays we're discussing here are called "static" arrays. Static arrays have a fixed size (and therefore number of elements). You can't increase the size of the array, nor decrease it. There are several other kinds of arrays in C#, namely dynamic arrays (ArrayLists - hehe) and jagged arrays, but those are outside of the scope of this tutorial.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Multi Dimensional Arrays&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;What we're going to do now is look at multidimensional arrays. Never mind about the name - Multi Dimensional arrays are just arrays made up of arrays. Let's imagine for a moment that there is a shop which sells Shoes, Hats, and Gloves. We want to represent the number of items sold per day in a grid, as follows:&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        Mon Tue Wed Thu Fri Sat&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Shoes     0   0   1   0   0   2 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Hats      2   1   2   2   1   3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Gloves    0   0   0   0   2   1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-family:trebuchet ms;"&gt;To store that data, we could:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Shoes[5];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Hats[5];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Gloves[5];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C# Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Shoes = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[5];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Hats = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[5];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Gloves = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[5];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;or Alternatively:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Mon[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Tue[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Wed[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Thu[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Fri[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; Sat[2];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C# Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Mon = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Tue = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Wed = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Thu = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Fri = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[2];&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] Sat = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[2];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Shoes[0] would represent the number of shoes sold on Monday, Shoes[1] the number of shoes sold on Tuesday, Gloves[5] the number of gloves sold on Saturday; while on the alternative example, Mon[0] would represent the number of Shoes sold on monday, Mon[1] the number of Hats sold on Monday, Thu[2] the number of Gloves sold on Thursday, and so on. That's not a bad way of doing things. Nowever, if the shop was selling more than 500 items, it would get a little bit difficult to make this work with our current method. Not that it's impossible - but it's not the right way of doing things. This is where multidimensional arrays come into play.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; ItemsSold[2][5];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C# Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[][] ItemsSold = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[2][5];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The declaration ItemsSold[2][5] in C and int[2][5] in C# is the one of a multidimensional array. Those kinds of arrays allow the user to create arrays of 2, 3, 4 or even N dimensions, according to the needs of the program. Here's a description of how the data is going to be stored in my array:&lt;/span&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;ItemsSold[0][0];  &lt;span class="rem"&gt;// Shoes sold on Mon&lt;/span&gt;&lt;br /&gt;ItemsSold[0][1];  &lt;span class="rem"&gt;// Shoes sold on Tue&lt;/span&gt;&lt;br /&gt;ItemsSold[0][2];  &lt;span class="rem"&gt;// Shoes sold on Wed&lt;/span&gt;&lt;br /&gt;ItemsSold[0][3];  &lt;span class="rem"&gt;// Shoes sold on Thu&lt;/span&gt;&lt;br /&gt;ItemsSold[0][4];  &lt;span class="rem"&gt;// Shoes sold on Fri&lt;/span&gt;&lt;br /&gt;ItemsSold[0][5];  &lt;span class="rem"&gt;// Shoes sold on Sat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ItemsSold[1][0];  &lt;span class="rem"&gt;// Hats sold on Mon&lt;/span&gt;&lt;br /&gt;ItemsSold[1][1];  &lt;span class="rem"&gt;// Hats sold on Tue&lt;/span&gt;&lt;br /&gt;ItemsSold[1][2];  &lt;span class="rem"&gt;// Hats sold on Wed&lt;/span&gt;&lt;br /&gt;ItemsSold[1][3];  &lt;span class="rem"&gt;// Hats sold on Thu&lt;/span&gt;&lt;br /&gt;ItemsSold[1][4];  &lt;span class="rem"&gt;// Hats sold on Fri&lt;/span&gt;&lt;br /&gt;ItemsSold[1][5];  &lt;span class="rem"&gt;// Hats sold on Sat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ItemsSold[2][0];  &lt;span class="rem"&gt;// Gloves sold on Mon&lt;/span&gt;&lt;br /&gt;ItemsSold[2][1];  &lt;span class="rem"&gt;// Gloves sold on Tue&lt;/span&gt;&lt;br /&gt;ItemsSold[2][2];  &lt;span class="rem"&gt;// Gloves sold on Wed&lt;/span&gt;&lt;br /&gt;ItemsSold[2][3];  &lt;span class="rem"&gt;// Gloves sold on Thu&lt;/span&gt;&lt;br /&gt;ItemsSold[2][4];  &lt;span class="rem"&gt;// Gloves sold on Fri&lt;/span&gt;&lt;br /&gt;ItemsSold[2][5];  &lt;span class="rem"&gt;// Gloves sold on Sat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Well, yes, we could have reversed it all. We could have made a 2-dimensional array which has its first dimension representing the day, and &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;the second dimension representing the item. The code would look like this:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;font-size:85%;"  &gt;C Code&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; ItemsSold[5][2];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;C# Code&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[][] ItemsSold = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[5][2];&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The arrys would represent:&lt;/span&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;ItemsSold[0][0];  &lt;span class="rem"&gt;// Monday's sales of Shoes&lt;/span&gt;&lt;br /&gt;ItemsSold[0][1];  &lt;span class="rem"&gt;// Monday's sales of Hats&lt;/span&gt;&lt;br /&gt;ItemsSold[0][2];  &lt;span class="rem"&gt;// Monday's sales of Gloves&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ItemsSold[1][0];  &lt;span class="rem"&gt;// Tuesday's sales of Shoes&lt;/span&gt;&lt;br /&gt;ItemsSold[1][1];  &lt;span class="rem"&gt;// Tuesday's sales of Hats&lt;/span&gt;&lt;br /&gt;ItemsSold[1][2];  &lt;span class="rem"&gt;// Tuesday's sales of Gloves&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ItemsSold[2][0];  &lt;span class="rem"&gt;// Wednesday's sales of Shoes&lt;/span&gt;&lt;br /&gt;ItemsSold[2][1];  &lt;span class="rem"&gt;// Wednesday's sales of Hats&lt;/span&gt;&lt;br /&gt;ItemsSold[2][2];  &lt;span class="rem"&gt;// Wednesday's sales of Gloves&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ItemsSold[3][0];  &lt;span class="rem"&gt;// Thursday's sales of Shoes&lt;/span&gt;&lt;br /&gt;ItemsSold[3][1];  &lt;span class="rem"&gt;// Thursday's sales of Hats&lt;/span&gt;&lt;br /&gt;ItemsSold[3][2];  &lt;span class="rem"&gt;// Thursday's sales of Gloves&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ItemsSold[4][0];  &lt;span class="rem"&gt;// Friday's sales of Shoes&lt;/span&gt;&lt;br /&gt;ItemsSold[4][1];  &lt;span class="rem"&gt;// Friday's sales of Hats&lt;/span&gt;&lt;br /&gt;ItemsSold[4][2];  &lt;span class="rem"&gt;// Friday's sales of Gloves&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ItemsSold[5][0];  &lt;span class="rem"&gt;// Saturday's sales of Shoes&lt;/span&gt;&lt;br /&gt;ItemsSold[5][1];  &lt;span class="rem"&gt;// Saturday's sales of Hats&lt;/span&gt;&lt;br /&gt;ItemsSold[5][2];  &lt;span class="rem"&gt;// Saturday's sales of Gloves&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-family:trebuchet ms;"&gt;Assignment of dimensions is up to you - whether you want to put the days in the first dimension or in the second all depends on you and what you want to code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Finally...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Finally, when should we use static arrays, and when should we use dynamic arrays? Static arrays should be used when you're ABSOLUTELY certain that the size of the array will never exceed a certain limit. Example - number of days in a week, number of days in a month (even if it's sometimes 28,29,30 or 31, declaring an array with 31 elements is enough. We might be wasting 4-16 bytes, but it's still ok).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;However, we SHOULD use dynamic arrays when we're not certain about the number of elements that is going to fit into the array. E.g. Number of employees, number of files in a directory, number of items being sold by a shop(yes, that can vary).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Dynamic arrays contain additional code to make the whole thing work - which makes it slower. Static arrays are pretty straightforward when it comes to execution - not much code, executes fast.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I hope you enjoyed reading the tutorial :)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I would like to express my warmest thanks to:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;ul&gt;   &lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;My 1.5 Gb of Ram, for helping me, all the time&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;My new screen, for not being a blurry dick&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Michael Jackson, for not reading this tutorial&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;The internet, and TCP/IP for making this possible&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Notepad, a friend of mine.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;Bill Gates, for nothing&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; &lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I'm dedicating this tutorial to my uni friends who are completely clueless about arrays; and to my one and only frequent reader (yeah, I've got only one fucking "frequent" reader. Damn. Thought I was popular.) &lt;span style="font-weight: bold; font-style: italic;"&gt;Ahad&lt;/span&gt;. Yo dude! What's up? :P&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112836568024407712?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112836568024407712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112836568024407712&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112836568024407712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112836568024407712'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/10/arrays-in-c-and-c.html' title='Arrays in C# and C'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112706750896579645</id><published>2005-09-18T20:53:00.000+04:00</published><updated>2005-09-18T22:32:34.210+04:00</updated><title type='text'>Popularity Checking Tool - And Random Thoughts</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Find out if you're popular or not.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;span style="font-style: italic;"&gt;[Yay, my popularity is 0.0000000000000000000000000000000000001]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-size:100%;"&gt;I was a little bit busy. I had homework to do, I had an assignment to complete and on top of that, I'm working on a freelance job, and I have 2 personal projects running. Which leaves me with plenty of free time to think about nonesense. I was wondering whether there's a way of measuring one's popularity. Of course, if you want to measure something, you need to have something else against which to compare the value.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I devised an ingenious (and perfectly flawed) means of finding out a person's popularity, which I decided to baptize (2 minutes ago) as the "Rowan-Dynamic-Popularity-Counter". Rowan, because it's my name. Dynamic, because it sounds cool, and popularity counter, because after performing the various hyper-complex mathematical calculations involving addition and division of whole numbers, you're left with a floating point value which represents an invividual's popularity, compared to another one.&lt;br /&gt;&lt;br /&gt;Comparing your popularity won't work, if you're a "normal" individual. This technique of finding popularity is solely based on the number of web pages that contains your name. You need to be some kind of actor/actress, or singer or somebody who yields more than 1000 page results on search engines with your name being the exact keyword. Although it doesn't really represent real-world statistics, it does mirror popularity to a certain extent.&lt;br /&gt;&lt;br /&gt;Well, yes. My RDPC (Rowan Dynamic Popularity Counter&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; (TM)&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;) algorithm involves the use of search engines to count the number of results returned with exact matching keywords. Of course, because nothing is absolute in this universe, you have to compare the total number of results with a known celebrity's return results.&lt;br /&gt;&lt;br /&gt;The use of multiple search engines will theoretically yield better results, if we consider that different search engines cover different parts of the internet (although this is not totally true).&lt;br /&gt;&lt;br /&gt;I needed a lab rat. I found the name "Jaime Ray Newman" on IMDB. Turns out she stars in 2 episodes of SG-Atlantis. Maybe I should download those sometime soon... I tested her popularity against Nicole Kidman's:&lt;br /&gt;&lt;br /&gt;[J] represents Jaime, [K] represents Nicole Kidman&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; google&lt;/span&gt;&lt;br /&gt;[J] 44,400&lt;br /&gt;[K] 5,790,000&lt;br /&gt;-&gt; 0.77%&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; msn&lt;/span&gt;&lt;br /&gt;[J] 1,163&lt;br /&gt;[K] 802,235&lt;br /&gt;-&gt; 0.14%&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; yahoo&lt;/span&gt;&lt;br /&gt;[J] 2,560&lt;br /&gt;[K] 10,300,000&lt;br /&gt;-&gt; 0.02%&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; all the web&lt;/span&gt;&lt;br /&gt;[J] 1,150&lt;br /&gt;[K] 4,690,000&lt;br /&gt;-&gt; 0.02%&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Average&lt;/span&gt;: 0.24%&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Jamie Ray Newman is therefore currently at 0.24% (18 Sep 05) of Nicole Kidman's popularity. Yep... Now time for automation. How about putting all of this into a little C# program that'll do the job for us, eh? Hehe... It'll be a totally useless program, but &lt;a href="http://www.tifareth.com/tpsy.html"&gt;there's worse&lt;/a&gt;. Look what I found (quoted from http://www.tifareth.com/tpsy.html):&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;font-family:TIMES NEW ROMAN;font-size:100%;"  &gt; Tele Hypnosis Pro is a esoteric program that uses the occult power of your computer to influence people remotely; the program takes its root in the ancient qabalistic magick and the modern psychotronics, giving you an unvaluable tool to influence people remotely. The effect of the program is natural and progressive; that means that the effects are not sudden, so the person will never know that has been submitted to remote mind control; the effects are progressive, so for example, if you use TELE HYPNOSIS PRO to seduce remotely a woman that previously ignored you, the effects will be progressive, she will start to feel some attraction for you, that with the continue usage of the program, will become love, and finally, deep love; the effect is so natural that she will never suspect she was submitted to remote mind control; she will always think that she fell in love for you in a natural way.&lt;/span&gt;&lt;span style=";font-family:TIMES NEW ROMAN;font-size:130%;"  &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: trebuchet ms;"&gt;I always thought I was a bit crazy. I really feel normal now. And I'm proud I can write fairly good English.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;Coming up next week&lt;/span&gt;: A full tutorial on how to use the System.Occult namespace, and make use of the System.Occult.MindControl class. If you don't have the Occult namespace on your GAC, download the ODK (Occult Development Kit) from Microsoft. It's free.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112706750896579645?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112706750896579645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112706750896579645&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112706750896579645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112706750896579645'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/09/popularity-checking-tool-and-random.html' title='Popularity Checking Tool - And Random Thoughts'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112611057514457309</id><published>2005-09-07T19:48:00.000+04:00</published><updated>2005-09-08T10:59:20.916+04:00</updated><title type='text'>MySQL with C#</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;A quick intro&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;Is MySQL really mine?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hello guys. I'm back from uni, and in full health. I've got so many new things to tell you, so many new things to teach you... hehe! :)&lt;br /&gt;&lt;br /&gt;MySql is one of the most popular (and free) database management software around. You can have a look and freely download MySQL at &lt;a href="http://www.mysql.com/"&gt;www.mysql.com&lt;/a&gt; - make sure to download the .Net connector and also the MySQL administrator if you can. It's pretty useful if you don't know much of MySQL.&lt;br /&gt;&lt;br /&gt;Now, let's get started. After downloading MySQL, MySQL's Administrator and MySQL Connector, make sure you're not a silly dick with a condom stuck up in your ass. Already checked? Okay, we're set to go.&lt;br /&gt;&lt;br /&gt;We'll open up MySQL Administrator. The MySQL Administrator provides a nice user interface for people like me and you (if you're reading this, then I guess you don't know much about SQL) who aren't quite fluent in SQL. Well, I wasn't a few months ago, but now I'm some kind of advanced noob. Anyways, open up MySQL Administrator. You'll see something like this:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://photos1.blogger.com/blogger/38/405/1600/MySQL.gif" alt="" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I remember being stuck on this fucking screen for quite some time the first time I opened up MySQL. Well duh, of course, the server host is localhost, and the username is "root" (and not "sa"). The password's the password that you typed in during installation. Don't change the port unless you specified something else during install. Click on OK. You should now be into MySQL Administrator.&lt;br /&gt;&lt;br /&gt;At the top left, you'll see a menu with pretty icons on it. There's mainly "Server Information" which gives you information about your SQL server, Service Control - which allows you to start / stop / restart the MySQL service on your machine, Startup Variables - some useful variables and paths for MySQL, User Administration - where you can create / manage / delete / update users, etc... I'm not going to explain in detail what each of the menu items do, they're pretty much straightforward I think :)&lt;br /&gt;&lt;br /&gt;Let's get straight to the point. What interests us for the moment is the Catalogs menu item, found at the bottom of the top-left menu. Click on the catalog, and create a new catalog by right-clicking on some empty space on the list box right beneath the top-right menu. Choose "Create New Schema". By default, mysql already has a few schema's created, but never mind about them. Create a new one, called CS. CS, of course, doesn't stand for Counter-Strike (as many dick-heads might have thought), but rather for C-Sharp. This is going to be our test catalog.&lt;br /&gt;&lt;br /&gt;Right, after creating that schema, we'll need to create a new table for it. Right click on the big space on the right of the menu's (where obviously the tables should be, but aren't) and click on Create Table. Well, heh, you can also click on the little "Create Table" button, but that's all up to you.&lt;br /&gt;&lt;br /&gt;Create a table named users. Make sure the table is of type "MyISAM" and not "InnoDB". We don't need to use transactions here :) Here are screenshots of my users table:.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://photos1.blogger.com/blogger/38/405/1600/Fields.gif" alt="" border="0" /&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;Here are the types I used. Make sure usr_Name (the username) and usr_Pass are maked as "Binary". Else, the username and passwords wouldn't be case-sensitive at all.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://photos1.blogger.com/blogger/38/405/1600/TableType.gif" alt="" border="0" /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;We don't need no transactions! Use MyISAM storage engine.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;Right. Now that our tables are set up, we can open up our C# editor. Create a new console application. Add a reference to the MySQL .net Connector (which I'm sure you already downloaded and installed from &lt;a href="http://dev.mysql.com/downloads/connector/net/1.0.html"&gt;this location&lt;/a&gt;). The MySQL connector for the .Net framework 1.0, after installation, can normally be found at [MySQLInstallPath]\MySQL Connector Net 1.0.4\bin\.NET 1.0&lt;br /&gt;&lt;br /&gt;Here's the wrapper that I wrote for this example. It's pretty straightforward. There's a class called "DbWrapper" which does all the database work for us. The DbWrapper has methods to add a user, verify whether a username exists or not, and validate a username and password.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; MySql.Data.MySqlClient;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CSConnector&lt;br /&gt;{&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Wraps calls to the users database&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DbWrapper&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; MySqlConnection sqlConn;&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; connStr;&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; isConnected;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Creates a new database wrapper object that wraps around&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// the users table.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="svr"&amp;gt;The name of the server&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="db"&amp;gt;The database catalog to use&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="user"&amp;gt;The user name&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="pass"&amp;gt;The user password&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DbWrapper(&lt;span class="kwrd"&gt;string&lt;/span&gt; svr, &lt;span class="kwrd"&gt;string&lt;/span&gt; db, &lt;span class="kwrd"&gt;string&lt;/span&gt; user, &lt;span class="kwrd"&gt;string&lt;/span&gt; pass)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.connStr = &lt;span class="str"&gt;"Server="&lt;/span&gt;+svr+&lt;span class="str"&gt;";Database="&lt;/span&gt;+db+&lt;span class="str"&gt;";Uid="&lt;/span&gt;+user+&lt;span class="str"&gt;";Pwd="&lt;/span&gt;+pass+&lt;span class="str"&gt;";"&lt;/span&gt;;&lt;br /&gt;            &lt;br /&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                sqlConn = &lt;span class="kwrd"&gt;new&lt;/span&gt; MySqlConnection(&lt;span class="kwrd"&gt;this&lt;/span&gt;.connStr);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception excp)&lt;br /&gt;            {&lt;br /&gt;                Exception myExcp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Error connecting you to "&lt;/span&gt; +&lt;br /&gt;                    &lt;span class="str"&gt;"the my sql server. Internal error message: "&lt;/span&gt; + excp.Message, excp);&lt;br /&gt;                &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.isConnected = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Creates a new database wrapper object that wraps around&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// the users table.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="connStr"&amp;gt;A connection string to provide to connect&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// to the database&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DbWrapper(&lt;span class="kwrd"&gt;string&lt;/span&gt; connStr)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.connStr = connStr;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                sqlConn = &lt;span class="kwrd"&gt;new&lt;/span&gt; MySqlConnection(&lt;span class="kwrd"&gt;this&lt;/span&gt;.connStr);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception excp)&lt;br /&gt;            {&lt;br /&gt;                Exception myExcp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Error connecting you to "&lt;/span&gt; +&lt;br /&gt;                    &lt;span class="str"&gt;"the my sql server. Error: "&lt;/span&gt; + excp.Message, excp);&lt;br /&gt;                &lt;br /&gt;                &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.isConnected = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Opens the connection to the SQL database.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Connect()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;bool&lt;/span&gt; success = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.isConnected == &lt;span class="kwrd"&gt;false&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.sqlConn.Open();&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception excp)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.isConnected = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;                    success = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;                    Exception myException = &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Error opening connection"&lt;/span&gt; +&lt;br /&gt;                        &lt;span class="str"&gt;" to the sql server. Error: "&lt;/span&gt; + excp.Message, excp);&lt;br /&gt;                    &lt;br /&gt;                    &lt;span class="kwrd"&gt;throw&lt;/span&gt; myException;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (success)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.isConnected = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Closes the connection to the sql connection.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Disconnect()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.isConnected)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.sqlConn.Close();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Gets the current state (boolean) of the connection.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// True for open, false for closed.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsConnected&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.isConnected;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Adds a user into the database&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="username"&amp;gt;The user login&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="password"&amp;gt;The user password&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddUser(&lt;span class="kwrd"&gt;string&lt;/span&gt; username, &lt;span class="kwrd"&gt;string&lt;/span&gt; password)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; Query = &lt;span class="str"&gt;"INSERT INTO users(usr_name, usr_pass) values"&lt;/span&gt; +&lt;br /&gt;                &lt;span class="str"&gt;"('"&lt;/span&gt;+username+&lt;span class="str"&gt;"','"&lt;/span&gt;+password+&lt;span class="str"&gt;"')"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            MySqlCommand addUser = &lt;span class="kwrd"&gt;new&lt;/span&gt; MySqlCommand(Query, &lt;span class="kwrd"&gt;this&lt;/span&gt;.sqlConn);&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                addUser.ExecuteNonQuery();&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception excp)&lt;br /&gt;            {&lt;br /&gt;                Exception myExcp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Could not add user. Error: "&lt;/span&gt; +&lt;br /&gt;                    excp.Message, excp);&lt;br /&gt;                &lt;span class="kwrd"&gt;throw&lt;/span&gt;(myExcp);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Verifies whether a user with the supplied user&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// credentials exists in the database or not. User&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// credentials are case-sensitive.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="username"&amp;gt;The user login&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="password"&amp;gt;The user password&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;A boolean value. True if the user exists&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// in the database, false if the user does not exist&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// in the database.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; VerifyUser(&lt;span class="kwrd"&gt;string&lt;/span&gt; username, &lt;span class="kwrd"&gt;string&lt;/span&gt; password)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; returnValue = 0;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; Query = &lt;span class="str"&gt;"SELECT COUNT(*) FROM users where (usr_Name="&lt;/span&gt; +&lt;br /&gt;                &lt;span class="str"&gt;"'"&lt;/span&gt;+username+&lt;span class="str"&gt;"' and usr_Pass='"&lt;/span&gt;+password+&lt;span class="str"&gt;"') LIMIT 1"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            MySqlCommand verifyUser = &lt;span class="kwrd"&gt;new&lt;/span&gt; MySqlCommand(Query, &lt;span class="kwrd"&gt;this&lt;/span&gt;.sqlConn);&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                verifyUser.ExecuteNonQuery();&lt;br /&gt;&lt;br /&gt;                MySqlDataReader myReader = verifyUser.ExecuteReader();&lt;br /&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;while&lt;/span&gt;(myReader.Read() != &lt;span class="kwrd"&gt;false&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    returnValue = myReader.GetInt32(0);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                myReader.Close();&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception excp)&lt;br /&gt;            {&lt;br /&gt;                Exception myExcp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Could not verify user. Error: "&lt;/span&gt; +&lt;br /&gt;                    excp.Message, excp);&lt;br /&gt;                &lt;span class="kwrd"&gt;throw&lt;/span&gt;(myExcp);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (returnValue == 0)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// Checks whether a supplied user name exists or not&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="username"&amp;gt;The user name&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;True if the username is already in the table,&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/// false if the username is not in the table&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; UserExists(&lt;span class="kwrd"&gt;string&lt;/span&gt; username)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; returnValue = 0;&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; Query = &lt;span class="str"&gt;"SELECT COUNT(*) FROM users where (usr_Name="&lt;/span&gt; +&lt;br /&gt;                &lt;span class="str"&gt;"'"&lt;/span&gt;+username+&lt;span class="str"&gt;"') LIMIT 1"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            MySqlCommand verifyUser = &lt;span class="kwrd"&gt;new&lt;/span&gt; MySqlCommand(Query, &lt;span class="kwrd"&gt;this&lt;/span&gt;.sqlConn);&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                verifyUser.ExecuteNonQuery();&lt;br /&gt;&lt;br /&gt;                MySqlDataReader myReader = verifyUser.ExecuteReader();&lt;br /&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;while&lt;/span&gt;(myReader.Read() != &lt;span class="kwrd"&gt;false&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    returnValue = myReader.GetInt32(0);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                myReader.Close();&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception excp)&lt;br /&gt;            {&lt;br /&gt;                Exception myExcp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Could not verify user. Error: "&lt;/span&gt; +&lt;br /&gt;                    excp.Message, excp);&lt;br /&gt;                &lt;span class="kwrd"&gt;throw&lt;/span&gt;(myExcp);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (returnValue == 0)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;This is not really a tutorial on SQL statements. But still, I'll give you a quick overview on what exactly I did in the statements, and how you can use this code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;First of all, it's up to you to make sure that the users don't include single inverted commas into the username or password fields. You &lt;span style="font-weight: bold;"&gt;must absolutely&lt;/span&gt; make sure the user can only enter strings containing only characters a..z, A..Z and numbers. If you don't, you might run the risk of having SQL injection attacks on your code, especially if you're making an ASP.net Web Application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To insert a new user:&lt;/span&gt;&lt;br /&gt;INSERT INTO users(usr_Name, usr_Pass) VALUES('Rowan', 'ISeeSharp');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To verify whether a user exists:&lt;/span&gt;&lt;br /&gt;SELECT COUNT(*) FROM users WHERE (usr_Name='Rowan') LIMIT 1;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To verify user credentials:&lt;/span&gt;&lt;/span&gt;&lt;tablename&gt;&lt;fields&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;SELECT COUNT(*) FROM users WHERE (usr_Name='Rowan' AND usr_Pass='ISeeSharp') LIMIT 1;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There's no black magic in there. I'm just inserting users and counting records. Here's how you can use the wrapper - I used only the Add user and UserExists method. You can try the rest out yourself :)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;            DbWrapper myWrapper = &lt;span class="kwrd"&gt;new&lt;/span&gt; DbWrapper(&lt;span class="str"&gt;"localhost"&lt;/span&gt;, &lt;span class="str"&gt;"CS"&lt;/span&gt;,&lt;br /&gt;                &lt;span class="str"&gt;"iseesharp"&lt;/span&gt;, &lt;span class="str"&gt;"seesharper"&lt;/span&gt;);&lt;br /&gt;            myWrapper.Connect();&lt;br /&gt;&lt;br /&gt;            myWrapper.AddUser(&lt;span class="str"&gt;"Rowan"&lt;/span&gt;, &lt;span class="str"&gt;"ISeeSharp"&lt;/span&gt;);&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (myWrapper.UserExists(&lt;span class="str"&gt;"rowan"&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(&lt;span class="str"&gt;"Something's weird here"&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (myWrapper.UserExists(&lt;span class="str"&gt;"Rowan"&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(&lt;span class="str"&gt;"I exist, therefore I think!"&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            myWrapper.Disconnect();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;This short piece of code instantiates a new DbWrapper, and passes it the required parameters to connect to my database. It adds a new user "Rowan" with the password "ISeeSharp" into the SQL Database. In between the Connect() and Disconnect() methods, you'll be able to use any of the provided methods in the wrapper. Make sure you disconnect after using the wrapper!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Rowy&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112611057514457309?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112611057514457309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112611057514457309&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112611057514457309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112611057514457309'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/09/mysql-with-c.html' title='MySQL with C#'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112425232222972942</id><published>2005-08-17T08:01:00.000+04:00</published><updated>2005-08-17T08:18:42.236+04:00</updated><title type='text'>I'm back!</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-family: trebuchet ms; font-weight: bold;"&gt;Yes. I am back.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I'm starting uni this year (after much debating with my inner selves) , and... well I'm doing Business IT. I really wanted to Computer Science and Eng. course, but well... Business doesn't look bad. Besides, I've still got programming modules in that - OOP starts in Semester 2, and they'll most probably have us to write&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;cout &lt;&lt; "Hello World";&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;during semester one. Oh well, who cares! It's coding, coding, coding!&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I hope you guys registered for the Google Jam. And also for the TopCoder Open... this is going to be fun, fun, FUN! YEAH BABE!&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;Anyway, there's much to say about C#. I've written some nice apps lately, but well... I've run across a few problems. I think I might need to convert my code to C (yes, I know, it's blasphemy, but well) - I wrote this neat program called "WordSearch", which actually builds a tree out of a dictionary (a tree where each node is connected to 26 other nodes) - but anyway, the first time I ran it, that piece of crap filled 57 megs of my memory straight away! Fuck man... Well after much mem optimization, I managed to bring the number down to 52 megs (believe me, I tried many things - I used a byte instead of a char, I killed strings, I did everything!) - but then I got this neat program called the CLR Analyzer, which actually tells you which part of your program is taking space - and well... yeah... never mind about which part is taking the space. I just can't use a class for a node. I'm going for C for this project.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;Where can you find freelance programmers? Where can freelance programmers sign up for serious projects? I need cash... like everybody in this world - heh. But where to get it? Hmm... My coding skills - are they worth anything in this world? I wonder.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I want to open up a business. You can't much in here by working as coder. Sick sad un-OOP world.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112425232222972942?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112425232222972942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112425232222972942&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112425232222972942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112425232222972942'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/08/im-back.html' title='I&apos;m back!'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112233255209089149</id><published>2005-07-26T02:14:00.000+04:00</published><updated>2005-07-26T03:02:32.110+04:00</updated><title type='text'>Free Gmail Invites</title><content type='html'>&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;Yup, 50 free invites&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic; font-family: trebuchet ms;font-size:85%;" &gt;[rowy loves you all, even if you don't C#]&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I managed to set up Google Ads on my blog. Wasn't easy to make firefox and ie agree on a common template.&lt;br /&gt;&lt;br /&gt;While strolling on the beach (yeah, I live at the beach. See my &lt;a href="http://flicenflac.blogspot.com"&gt;other blog&lt;/a&gt;), I've been cooking up some other really interesting C# projects (well, I'm still designing the recipe in my head). I was a bit pissed off about my console thingy - something like that already exists (thanks to Peter Jausovec for letting me know) but hey, there still are interesting things to do :D&lt;br /&gt;&lt;br /&gt;Btw, for you guys out there... I'm giving out &lt;span style="font-weight: bold;font-size:180%;" &gt;free Gmail invites&lt;/span&gt;. It's been nearly a year that I'm on Gmail, and I'm kinda tired of seeing all those invites... If you're interested, please leave a comment, or mail me at:&lt;br /&gt;&lt;br /&gt;hehehe at gmail.com&lt;br /&gt;&lt;br /&gt;[replace "hehehe" by "rowan.rishi" and "at" by "@"]&lt;br /&gt;[you'll get the invite if you're smart enough to do that simple text replace]&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112233255209089149?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112233255209089149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112233255209089149&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112233255209089149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112233255209089149'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/free-gmail-invites.html' title='Free Gmail Invites'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112215518310821163</id><published>2005-07-24T01:01:00.000+04:00</published><updated>2005-07-24T01:46:23.113+04:00</updated><title type='text'>An Interesting C# Project</title><content type='html'>&lt;span style="font-weight: bold; font-family: trebuchet ms;"&gt;Missing the good ol' DOS console?&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: trebuchet ms;font-size:85%;" &gt;&lt;span style="font-style: italic;"&gt;Let's revive the past!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;I'm pretty nostalgic of MS-DOS... I was quite young when I first saw and used MS-DOS, which came with Basic. I used to copy examples from a Basic book, and then test them. That's when I began coding. I was five years old.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: trebuchet ms;"&gt;Languages have greatly evolved since Basic. C, C++, Pascal... and many many others. We're at a time when it'd take only a few months to develop a *really* cool console. However, when I say "cool", I don't mean a console using a single line Edit box, and a Multi line Edit box with a background on it. Hell, no.&lt;br /&gt;&lt;br /&gt;I want a simple console, which is displayed on a real .Net console, with only a few inbuilt commands. The console would have a "Commands" directory, which would contain compiled .Net assemblies. The console, upon starting, would reflect inside of those dll's, and list out the commands available within them.&lt;br /&gt;&lt;br /&gt;Of course, all commands would have to implement a "Command" interface, with an Execute method, which would accept as parameters an array of string (the list of arguments which the command should process), a Help method accepting a string as parameter and returning a string (which would provide help on a certain parameter), and a Description read-only property.&lt;br /&gt;&lt;br /&gt;Does that sound too ambitious?&lt;br /&gt;&lt;br /&gt;There are loads of problems that might arise during development of such a program. For example: what happens if there are two commands of the same name that exist?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Example:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Search.dll implements a Delete command&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic;"&gt;Files.dll Implements a Delete command&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Could this issue be solved just like .Net deals with ambiguous names?&lt;br /&gt;&lt;br /&gt;Does &lt;span style="font-style: italic;"&gt;Search.Delete "expression"&lt;/span&gt; sound weird? Hmmm... it's something to look into. But for the moment, let me try to reflect inside assemblies, which aren't my own programs. That might be useful.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112215518310821163?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112215518310821163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112215518310821163&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112215518310821163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112215518310821163'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/interesting-c-project.html' title='An Interesting C# Project'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112213923894588872</id><published>2005-07-23T21:03:00.000+04:00</published><updated>2005-07-23T21:22:49.943+04:00</updated><title type='text'>Explicit Typecasts</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Or also known as tranny-casts&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;span style="font-family:trebuchet ms;"&gt;[intermediate]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Implicit Typecasts are casts which occur when the compiler cannot directly treat one data type as another, and require "user intervention". By user intervention, I mean, user code :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Trying to typecast a StreamReader into an ArrayList would be a bad idea. That's a typecasting that's not "meant to be" (would raise an InvalidCast Exception), and that's why the user should kick in his/her own code for it to happen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;As usual, I made another one of my useless classes, for the purpose of this tutorial. The Data class simply holds a name (string) and a DataValue (int). Also, I kicked in a few lines of code which would allow the data class to be typecasted as string (thus returning the name), or typecast as int (returning the DataValue). Check it out below:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Simple class which holds a name (string) and a&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// value (int).&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Data&lt;br /&gt;{&lt;br /&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;&lt;br /&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; dataValue;&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Instantiates a new Data class&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;param name="name"&amp;gt;The name the data class &lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// will hold&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;param name="dataValue"&amp;gt;The value the data&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// class will hold&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; Data(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;int&lt;/span&gt; dataValue)&lt;br /&gt;   {&lt;br /&gt;       &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = name;&lt;br /&gt;       &lt;span class="kwrd"&gt;this&lt;/span&gt;.dataValue = dataValue;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Gets or Sets the name&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name&lt;br /&gt;   {&lt;br /&gt;       get&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.name;&lt;br /&gt;       }&lt;br /&gt;       set&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Gets or sets the Data Value&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; DataValue&lt;br /&gt;   {&lt;br /&gt;       get&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.dataValue;&lt;br /&gt;       }&lt;br /&gt;       set&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="kwrd"&gt;this&lt;/span&gt;.dataValue = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Allow typecasting into string&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;param name="someData"&amp;gt;The data class&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// which needs to be typecasted&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The name of the data class&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;explicit&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;(Data someData)&lt;br /&gt;   {&lt;br /&gt;       &lt;span class="kwrd"&gt;string&lt;/span&gt; retValue = someData.name;&lt;br /&gt;       &lt;span class="kwrd"&gt;return&lt;/span&gt; retValue;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Allow typecasting into int&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;param name="someData"&amp;gt;The data class&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// which needs to be typecasted&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The value of the data class&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;explicit&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;(Data someData)&lt;br /&gt;   {&lt;br /&gt;       &lt;span class="kwrd"&gt;int&lt;/span&gt; retValue = someData.dataValue;&lt;br /&gt;       &lt;span class="kwrd"&gt;return&lt;/span&gt; retValue;&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The only part of this code that interests us is:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Allow typecasting into string&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="someData"&amp;gt;The data class&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// which needs to be typecasted&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The name of the data class&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;explicit&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;(Data someData)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; retValue = someData.name;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; retValue;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Allow typecasting into int&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="someData"&amp;gt;The data class&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// which needs to be typecasted&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The value of the data class&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;explicit&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;(Data someData)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; retValue = someData.dataValue;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; retValue;&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Note that those two methods are static, and marked with the explicit and operator keywords. The first method simply contains code that is going to be executed if the user decides to typecast into a string. Note that the return type (i.e. the operation of the casting) is a string. The value in parameters is a Data class, i.e. the data class that's being typecasted into a string. The next lines of code are pretty easy. The name of the Data class is extracted by looking into the Data class passed into parameters, and this value returned (it's a string anyway).&lt;br /&gt;&lt;br /&gt;And that's all there is to explicit typecasting. The second method does pretty much the same, but allows typecasting into an int (notice: the return type's an int). Here's how I explicitly typecasted my Data class into a string, and then an int.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// The main entry point for the application.&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     [STAThread]&lt;br /&gt;     &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;     {&lt;br /&gt;         Data myData = &lt;span class="kwrd"&gt;new&lt;/span&gt; Data(&lt;span class="str"&gt;"Bebs"&lt;/span&gt;, 19);&lt;br /&gt;&lt;br /&gt;         Console.WriteLine((&lt;span class="kwrd"&gt;string&lt;/span&gt;)myData);&lt;br /&gt;         Console.WriteLine(((&lt;span class="kwrd"&gt;int&lt;/span&gt;)myData).ToString());&lt;br /&gt;&lt;br /&gt;         Console.ReadLine();&lt;br /&gt;&lt;br /&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;Yup... and it works :) The complete source code can be found below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; UselessStuff&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// MultiParam App&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;class&lt;/span&gt; UselessMain&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// The main entry point for the application.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      [STAThread]&lt;br /&gt;      &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;      {&lt;br /&gt;          Data myData = &lt;span class="kwrd"&gt;new&lt;/span&gt; Data(&lt;span class="str"&gt;"Bebs"&lt;/span&gt;, 19);&lt;br /&gt;&lt;br /&gt;          Console.WriteLine((&lt;span class="kwrd"&gt;string&lt;/span&gt;)myData);&lt;br /&gt;          Console.WriteLine(((&lt;span class="kwrd"&gt;int&lt;/span&gt;)myData).ToString());&lt;br /&gt;&lt;br /&gt;          Console.ReadLine();&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// Simple class which holds a name (string) and a&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// value (int).&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Data&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; dataValue;&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Instantiates a new Data class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="name"&amp;gt;The name the data class &lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// will hold&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="dataValue"&amp;gt;The value the data&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// class will hold&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; Data(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;int&lt;/span&gt; dataValue)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = name;&lt;br /&gt;          &lt;span class="kwrd"&gt;this&lt;/span&gt;.dataValue = dataValue;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Gets or Sets the name&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.name;&lt;br /&gt;          }&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Gets or sets the Data Value&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; DataValue&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.dataValue;&lt;br /&gt;          }&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.dataValue = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Allow typecasting into string&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="someData"&amp;gt;The data class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// which needs to be typecasted&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The name of the data class&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;explicit&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;(Data someData)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="kwrd"&gt;string&lt;/span&gt; retValue = someData.name;&lt;br /&gt;          &lt;span class="kwrd"&gt;return&lt;/span&gt; retValue;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Allow typecasting into int&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="someData"&amp;gt;The data class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// which needs to be typecasted&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The value of the data class&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;explicit&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;(Data someData)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="kwrd"&gt;int&lt;/span&gt; retValue = someData.dataValue;&lt;br /&gt;          &lt;span class="kwrd"&gt;return&lt;/span&gt; retValue;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112213923894588872?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112213923894588872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112213923894588872&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112213923894588872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112213923894588872'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/explicit-typecasts.html' title='Explicit Typecasts'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112208701607470862</id><published>2005-07-23T02:06:00.000+04:00</published><updated>2005-07-23T07:21:12.326+04:00</updated><title type='text'>A few typeof(System.Random) thoughts</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I thought up of the advantages of coding vs. going out with someone:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Why is coding better than going out with someone?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;1. Your programs use only your processing time.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;2. Your programs use only your pc's resources.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;3. Problems with a program can be solved by debugging.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;4. Programs can be terminated any time you wish.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;5. Programs don't mind when they execute with other programs.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;6. Programs carry out all the commands you give them. Without bitching you.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;7. Programs don't lie.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;8. Big programming mistakes at worse end up with a system reboot or re-install.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I just went through shit to fix my blog's template. I added a few meta tags, and suddenly decided that maybe I should try viewing it in Internet Explorer. Yeah, well, hehe, I use Firefox.&lt;br /&gt;&lt;br /&gt;The template was totally fucked up, with my menu below the main posts... Jesus Christ... spent about half an hour trying to find a balance between "good looking", "IE Compatible" and "Firefox Compatible". Well, template's fixed, and it all looks fine. I even managed to stretch the orange seperator...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;I got a few ideas for new tutorials. I wonder when I'll have time to write them down though. I'll write about chaining constructors, implicit and explicit typecasts, some beginner's stuff about Interfaces, and maybe Datasets.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Ah, yeah. Datasets. Would that be beginner or intermediate? Hmm... Maybe I can cook up several tutorials on datasets - one for beginners and one for intermediates.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Also, I wanted to write something about NUnit, and good programming practises. Hmm... I'll do that soon enough.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Anyway, I've been reading (or trying to read) the CSharp 2.0 Specs document from Microsoft. I know, that's kinda old - I heard that CSharp 3.0 specs are coming out soon. I think that the new features of C# have been throughly detailed in many places throughout the web, but there's something I'd love to comment on, especially about the Generic types, and the Nullable types. I believe that C# code's really understandable, and pretty neat as well. However, with the introduction of the "&lt;", "&gt;", "?" and also "::" signs, the face of C# as we all know it is going to change. What I mean by "the face of C#" is how general C# code looks like. C# code with Generics and nullable types look pretty weird. Okay, maybe that's because I'm not used to see that kind of C# code... but there's something telling me that C# code might look very nasty in Whidbey.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;On the whole, the CSharp 2.0 specs come round with loads of good news. Here's a quick summary of a few of the interesting things I saw:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;1. Generics&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I think that's one of the most publicized things about Whidbey. An example of the use of Generics could be an Arraylist, that's forced to accept only one kind of object, through the use of Generics. I.e. You can create an arraylist that accepts only strings, or integers. Writing generic classes, however, might get a little bit confusing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;2. Nullable types&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Well, simply put, a nullable type is a data type which has, apart from its value, a boolean value indicating whether the value on it has been set or not. So you can perform checks on variables, to see whether they've been initialized or not, through the HasValue property.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;3. Easier implementation of IEnumerable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Those of you who think that it's troublesome to implement IEnumerable (like me, for example), will be overjoyed to hear that there's now a much easier method to do it, thanks to the yield newly-introduced yeild break and yeild return keywords.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Hmm... well... there's more to Whidbey than what I've described here, namely anonymous methods and so on, but seriously, it's getting kinda late here. I think I'll go to sleep for a change.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Have a nice day, and may the code be with you.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112208701607470862?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112208701607470862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112208701607470862&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112208701607470862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112208701607470862'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/few-typeofsystemrandom-thoughts.html' title='A few typeof(System.Random) thoughts'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112205622484451576</id><published>2005-07-22T22:14:00.000+04:00</published><updated>2005-07-22T22:17:04.846+04:00</updated><title type='text'>Situation of Programmers in Mauritius</title><content type='html'>&lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;Every little kid out of high school wants to study computer science and engineering in university. However, many of them are just into comp. science because it's something popular to study. Yes, it's a "popular" subject.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;     &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;I wouldn't recommend computer science and engineering to people who just don’t know what they’re going to do later. You’ll end up hating the coding, and coding is what you’ll spend your time doing.&lt;/p&gt;     &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;Personally, I eat, drink, sleep and live with code. I don’t think I’ll get bored of coding someday. Coding… or designing software / classes. But you might. And you’ll hate your work, the company you work for, and your life in the end.&lt;/p&gt;     &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;Anyway, you might also turn out to be a great coder, and actually enjoy coding. Who knows? But don’t rush into computer science and engineering just because it’s the only best thing to study right after agriculture.&lt;/p&gt;     &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;Now, a little update for you guys. As soon as you’re out of university, you won’t be earning a lot. Nope. A certain company in &lt;st1:country-region st="on"&gt;&lt;st1:place st="on"&gt;Mauritius&lt;/st1:place&gt;&lt;/st1:country-region&gt; recruited a few programmers (that was last year), and paid them Rs 8000 / month. That’s about US$ 280 a month. After six months of training, their salary was raised to Rs 11, 000 – Rs 12,000 (US$ 385 - &lt;span style=""&gt; &lt;/span&gt;US$ 420). I’ve heard that another company (located in the cybertower) pays its programmers US$ 525 a month (Rs 15,000). Is there really a future for programming in here?&lt;/p&gt;     &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;The main argument of most employers is – “Mauritian programmers just can’t code properly.”&lt;/p&gt;         &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;True. Before becoming a good programmer, what you need is experience. As a friend of mine once said – “Fucking muppets need fucking training”. To all of you guys who chose comp. sci and eng. just because it’s a cool thing to study – you’re not going to go far if you don’t start moving your butt.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;         &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;Also, if we didn’t have so many people studying computer science, we’d probably be off with a smaller number of programmers, but more motivated and skilled.&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt; &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;Good Programming&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;           &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;Good programming practices are what will make of you a better coder. You can either learn the hard way – i.e. code, code, and keep coding. You’ll eventually understand why people use try’s and catch’es. You’ll understand why people put comments in their code, why people use NUnit. You could also start learning about good programming practices right now. There are tips and hits everywhere on the net&lt;o:p&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;b style=""&gt;The Substandard Programming Nation&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt; &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;As someone previously pointed out to me, the education system in here is all about spoon-feeding. That’s why most Mauritian programmers would back off as soon as they hear that they got to implement a shortest-path algorithm on a graph.&lt;/p&gt; &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;“Hell, isn’t there a method to do that in C#?”&lt;/p&gt; &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;Jesus fucking Christ. C# does have a lot of methods, but they’re here to make your life easier, not to do all the work. What, did you expect to find a method WankMe()? Well, FuckYou(). You need to work on your coding skills. Else, &lt;st1:place st="on"&gt;&lt;st1:country-region st="on"&gt;Mauritius&lt;/st1:country-region&gt;&lt;/st1:place&gt; will only be a god-damned sub-standard outsourcing paradise destination, with only sub-standard programmers who don’t know that there needs to be a try and a catch statement when trying to open a file.&lt;/p&gt; &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;That said, let us not forget that there really are some good coders in this country. People who are really motivated to learn more, sharpen their skills, and become good and better coders.&lt;/p&gt; &lt;p style="font-family: trebuchet ms;" class="MsoNormal"&gt;It’s all about the code.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112205622484451576?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112205622484451576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112205622484451576&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112205622484451576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112205622484451576'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/situation-of-programmers-in-mauritius.html' title='Situation of Programmers in Mauritius'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112198948164838403</id><published>2005-07-22T02:47:00.000+04:00</published><updated>2005-07-22T03:44:41.673+04:00</updated><title type='text'>Sex and C#</title><content type='html'>&lt;span style="font-family: trebuchet ms;font-size:100%;" &gt;Single 19 (soon to be 20) year old male, looking for female of the same age range for friendship or better, preferably living in Mauritius, sharing same passions about C#. Must understand polymorphism, be able to use enumerated types, must know how to chain constructors and use indexers, must have a vague idea (or better) of what MSIL could be and must know how to use different threading models in C#. Preference will be given to candidates who have knowledge of ASP.Net and to candidates who have big breasts.&lt;br /&gt;&lt;br /&gt;Any intimate encounter will occur in XML.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112198948164838403?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112198948164838403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112198948164838403&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112198948164838403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112198948164838403'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/sex-and-c.html' title='Sex and C#'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112198020254418602</id><published>2005-07-22T00:31:00.000+04:00</published><updated>2005-07-22T01:27:59.296+04:00</updated><title type='text'>Yet another cool and useful feature</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;The Params keyword&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:trebuchet ms;" &gt;[Beginner]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;&lt;br /&gt;The params keyword could be one of the coolest features of C-Sharp, if you haven't heard of it yet. Simply put, it allows you to enter multiple parameters of a same type. An alternative to this could be the use of an array - i.e. create a method that accepts an array of a certain kind of objects, but that's really troublesome. Here, check the code out - it's pretty simple and straightforward:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; MultiParams&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// MultiParam App&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; MyClass&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// The main entry point for the application.&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  [STAThread]&lt;br /&gt;  &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;  {&lt;br /&gt;      Console.WriteLine(AddAll(43, 94, 29, 958, 3283, 9285).ToString());&lt;br /&gt;      Console.ReadLine();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; AddAll(&lt;span class="kwrd"&gt;params&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[] numbers)&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="kwrd"&gt;double&lt;/span&gt; total = 0;&lt;br /&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; i &lt;span class="kwrd"&gt;in&lt;/span&gt; numbers)&lt;br /&gt;      {&lt;br /&gt;          total += i;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; total;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;What really interests us is the AddAll method. Let's have a closer look:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; AddAll(&lt;span class="kwrd"&gt;params&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[] numbers)&lt;br /&gt;{&lt;br /&gt;   &lt;span class="kwrd"&gt;double&lt;/span&gt; total = 0;&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; i &lt;span class="kwrd"&gt;in&lt;/span&gt; numbers)&lt;br /&gt;   {&lt;br /&gt;       total += i;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;return&lt;/span&gt; total;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;There's nothing particular in that method, apart from the "params" keyword used in the parameters. It's pretty strightforward. The use of the params in the parameters allows users to pass multiple values (in this case, multiple int's) of the same type - they all get kicked into an array of that object type (in this example, an array of int, which I named "numbers"). Using this function gets really easy now. All you have to do is to call the AddAll method with as much number of integer parameters as you want! Et voilà! Rien de plus façile! I called the AddAll method, and passed in a few numbers - and called the ToString() method.&lt;br /&gt;&lt;br /&gt;Now, think of your own ways to make a good use of the params keyword ;)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112198020254418602?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112198020254418602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112198020254418602&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112198020254418602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112198020254418602'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/yet-another-cool-and-useful-feature.html' title='Yet another cool and useful feature'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112197494883289279</id><published>2005-07-21T23:33:00.000+04:00</published><updated>2005-07-21T23:42:28.836+04:00</updated><title type='text'>A few basic things</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Decimal Places&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;span style="font-family:trebuchet ms;"&gt;[Beginner]&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;font-family:trebuchet ms;" &gt;There are quite a few things to know before really getting the hang of C#, and I believe that learning about how to format numbers that need to be output is something pretty basic, that many programmers disregard. However, here's a basic tutorial about controlling the number of decimal places that a decimal type displays.&lt;br /&gt;&lt;br /&gt;Let's move on directly to the code. It's simple. Nothing complicated to understand. Check it out:&lt;br /&gt;&lt;/span&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; NumberFormat&lt;br /&gt;{&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// MultiParam App&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;class&lt;/span&gt; Class1&lt;br /&gt;   {&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// The main entry point for the application.&lt;/span&gt;&lt;br /&gt;       &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;       [STAThread]&lt;br /&gt;       &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;       {&lt;br /&gt;           NumberFormatInfo myFormat = &lt;span class="kwrd"&gt;new&lt;/span&gt; NumberFormatInfo();&lt;br /&gt;                   &lt;span class="kwrd"&gt;double&lt;/span&gt; d = 15.6781005479;&lt;br /&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0; i&amp;lt;=10; i++)&lt;br /&gt;           {&lt;br /&gt;               myFormat.NumberDecimalDigits = i;&lt;br /&gt;               Console.WriteLine(i.ToString() +&lt;br /&gt;                   &lt;span class="str"&gt;" decimal digit(s): \t\t"&lt;/span&gt;+d.ToString(&lt;span class="str"&gt;"N"&lt;/span&gt;, myFormat));&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           Console.ReadLine();&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Notice that I've included System.Globalization in the usings. This is a namespace that is required in order to use the NumberFormatInfo class.&lt;br /&gt;&lt;br /&gt;What I did was basically to instantiate a NumberFormatInfo class, and play with the NumberDecimalDigits property (which I kept incrementing). Watch the results on a console :) Also, note the use of the overloaded ToString() method, in which I passed two parameters, namely a string ("N"), and the NumberFormatInfo class that I instantiated.&lt;br /&gt;&lt;br /&gt;Hope this little code snippet helps!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112197494883289279?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112197494883289279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112197494883289279&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112197494883289279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112197494883289279'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/few-basic-things.html' title='A few basic things'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112197209192621338</id><published>2005-07-21T22:48:00.000+04:00</published><updated>2005-07-22T01:18:24.953+04:00</updated><title type='text'>C# News</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;T&lt;/span&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;he graph below shows the number of times programmers of different languages got dates or were turned down while asking for a date.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/38/405/1600/Dates.gif" alt="" border="0" height="287" width="483" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;C# programmers enjoy a more sexually-active life. Experts can only agree.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;After an interview with Jack (fake name), an application optimizer (he uses ASM), we found out the real truth behind the lives of programmers who made bad choices.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;"I was under a lot of stress at home. I kept having fights with my wife, Tabitha (fake name). I knew it was because of it [the programming language I used]. I had to change, but I wasn't very sure which one. I went for VB. That, I think, was the worse decision of all my life."&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Like Jack, many programmers suffered the choices of their language. Ben (fake name), a C++ programmer earning US$4000 per month, was caught by his wife using Java at home. "She couldn't believe it. She sent me the divorce papers one week later," confides Ben, still trying to recover from his loss.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Some, however, seem to have understood what a programmer's life was all about. Sonya (fake name), a 24 year old hottie, agreed to share information on her programming past with us.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;"Before, I couldn't even get laid. Guys wouldn't even look at me. I was a Java programmer." Her sad expression reflects her unhappy past. "Fortunately, a friend of mine introduced me to C#. I easily got the hang of it, and found the language very comfortable to use." We had doubts about Sonya's claims on her inactive sexual life, when she explained to us: "I couldn't believe it. After two months of using C#, my breasts started to grow larger, and my butt and thighs more firm. It was incredible!". Sonya now enjoys a peaceful life with Brandon (fake name), also a C# programmer. They're expecting a baby this November. "If it's a boy, we're gonna call him Whidbey," the happy couple told us.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112197209192621338?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112197209192621338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112197209192621338&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112197209192621338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112197209192621338'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/c-news.html' title='C# News'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112189727626369166</id><published>2005-07-21T00:45:00.000+04:00</published><updated>2005-07-21T14:32:22.206+04:00</updated><title type='text'>Indexers</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Indexers in C#&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:trebuchet ms;" &gt;&lt;span style="font-size:85%;"&gt;Intermediate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-size:100%;"&gt;I've been up to nothing good on C#, and I thought I'd post something about indexers on C#. Being able to provide a collection class with an indexer could be a real cool thing, if you know how to do it :)&lt;br /&gt;&lt;br /&gt;Indexers allow your class(es) to be treated like arrays - an "index" is passed in between square brackets, and an object is returned. Just like an arraylist. Or an array :)&lt;br /&gt;&lt;br /&gt;To begin my second C# tutorial, please take a look at the utterly useless Item class:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// Just a dummy class named Item, with a few properties.&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Item&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;//Name represents the name of the item class&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;&lt;br /&gt;      &lt;span class="rem"&gt;//Data represents a data value&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; data;&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Constructor for the Item class.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="name"&amp;gt;String representing the name of the class&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="data"&amp;gt;Data the class will hold&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; Item(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;string&lt;/span&gt; data)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = name;&lt;br /&gt;          &lt;span class="kwrd"&gt;this&lt;/span&gt;.data = data;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Gets or sets the name of the class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.name;&lt;br /&gt;          }&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Gets or sets the it's data value&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Data&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.data;&lt;br /&gt;          }&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.data = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// - Little Note -&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// It's always good to use properties instead of&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// directly exposing a variable as public&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Well, as you can see, the Item class doesn't do anything particular. Of course, it's just a dummy class, created for the purpose of this tutorial. What would interest you would be the ItemHolder class - a class that can actually accept a collection of items. Check out the code below:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// A class that can hold Items&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ItemHolder&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;//This arraylist will actually contain all the items&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; ArrayList itemList;&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Creates a new instance of the ItemHolder class, which is able&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// to hold multiple items.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; ItemHolder()&lt;br /&gt;      {&lt;br /&gt;          itemList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Indexer for the ItemHolder class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; Item &lt;span class="kwrd"&gt;this&lt;/span&gt;[&lt;span class="kwrd"&gt;int&lt;/span&gt; pos]&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="rem"&gt;//Check whether the position is within the arraylist's index bounds&lt;/span&gt;&lt;br /&gt;              &lt;span class="kwrd"&gt;if&lt;/span&gt; ((pos &amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count-1) || (pos &amp;lt; 0))&lt;br /&gt;              {&lt;br /&gt;                  Exception myExcp =&lt;br /&gt;                      &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Index was out of bounds of array"&lt;/span&gt;);&lt;br /&gt;                  &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;              }&lt;br /&gt;              &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;              {&lt;br /&gt;                  &lt;span class="rem"&gt;//typecast to Item, and return&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;return&lt;/span&gt; ((Item)&lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos]);&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="rem"&gt;//Check whether the position is within the arraylist's index bounds&lt;/span&gt;&lt;br /&gt;              &lt;span class="kwrd"&gt;if&lt;/span&gt; ((pos &amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count-1) || (pos &amp;lt; 0))&lt;br /&gt;              {&lt;br /&gt;                  Exception myExcp =&lt;br /&gt;                      &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Index was out of bounds of array"&lt;/span&gt;);&lt;br /&gt;                  &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;              }&lt;br /&gt;              &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;              {&lt;br /&gt;                  &lt;span class="rem"&gt;//Make a type check, just in case&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt;.GetType() == &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Item))&lt;br /&gt;                  {&lt;br /&gt;                      Exception myExcp =&lt;br /&gt;                          &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"You can only assign objects of the type \"Item\""&lt;/span&gt;);&lt;br /&gt;                      &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;                          &lt;br /&gt;                  }&lt;br /&gt;                  &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;                  {&lt;br /&gt;                      &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos] = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;                  }&lt;br /&gt;              }              &lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Adds an item to the collection of Items&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="someItem"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddItem(Item someItem)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="rem"&gt;//Check whether the item's not null&lt;/span&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (someItem != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Add(someItem);&lt;br /&gt;          }&lt;br /&gt;          &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;          {&lt;br /&gt;              Exception myExcp =&lt;br /&gt;                  &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Null objects are not allowed in this collection"&lt;/span&gt;);&lt;br /&gt;              &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Returns a count of the total number of items inside&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// the this object&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Count&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Do take a closer look at the indexer:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Indexer for the ItemHolder class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; Item &lt;span class="kwrd"&gt;this&lt;/span&gt;[&lt;span class="kwrd"&gt;int&lt;/span&gt; pos]&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="rem"&gt;//Check whether the position is within the arraylist's index bounds&lt;/span&gt;&lt;br /&gt;              &lt;span class="kwrd"&gt;if&lt;/span&gt; ((pos &amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count-1) || (pos &amp;lt; 0))&lt;br /&gt;              {&lt;br /&gt;                  Exception myExcp =&lt;br /&gt;                      &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Index was out of bounds of array"&lt;/span&gt;);&lt;br /&gt;                  &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;              }&lt;br /&gt;              &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;              {&lt;br /&gt;                  &lt;span class="rem"&gt;//typecast to Item, and return&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;return&lt;/span&gt; ((Item)&lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos]);&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="rem"&gt;//Check whether the position is within the arraylist's index bounds&lt;/span&gt;&lt;br /&gt;              &lt;span class="kwrd"&gt;if&lt;/span&gt; ((pos &amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count-1) || (pos &amp;lt; 0))&lt;br /&gt;              {&lt;br /&gt;                  Exception myExcp =&lt;br /&gt;                      &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Index was out of bounds of array"&lt;/span&gt;);&lt;br /&gt;                  &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;              }&lt;br /&gt;              &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;              {&lt;br /&gt;                  &lt;span class="rem"&gt;//Make a type check, just in case&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt;.GetType() == &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Item))&lt;br /&gt;                  {&lt;br /&gt;                      Exception myExcp =&lt;br /&gt;                          &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"You can only assign objects of the type \"Item\""&lt;/span&gt;);&lt;br /&gt;                      &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;                          &lt;br /&gt;                  }&lt;br /&gt;                  &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;                  {&lt;br /&gt;                      &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos] = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;                  }&lt;br /&gt;              }              &lt;br /&gt;          }&lt;br /&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;This is what we're interested in. Disregard the code - it's just exceptions I couldn't resist throwing just in case the wrong type's being used (I'm forcing the use of Item types of objects inside the collection). The indexer doesn't get more complicated than&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &amp;lt;DataType&amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;[&amp;lt;DataType&amp;gt; &amp;lt;VariableName&amp;gt;]&lt;br /&gt;{&lt;br /&gt;  get&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  set&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Where the first &lt;span style="font-style: italic;"&gt;DataType&lt;/span&gt; &lt;datatype&gt; represents the return type of the indexer, the second &lt;datatype&gt;&lt;span style="font-style: italic;"&gt;DataType&lt;/span&gt; the type of the value passed into the square brackets, and &lt;span style="font-style: italic;"&gt;VariableName&lt;/span&gt; the name of the variable that you want to use for the value that the user has provided. There's also a get and a set property (the accessors) which enable you to execute different code, depending on whether the user's only reading the value, or modifying it.&lt;br /&gt;&lt;br /&gt;Now, for the code inside the indexer -&lt;br /&gt;&lt;br /&gt;Notice that my indexer directly returns an Item (saves you the typecasting, heh), given an int - which represents the index value of the Item inside of my collection. When the user tries to get an item, the get part of the accessor is executed. I made a little check on the value of the index being passed. Passing -1 would most certainly raise an exception - as well as passing a value outside of the bounds of the collection.&lt;br /&gt;&lt;br /&gt;In the set accessor, I had to carry out even more checks - apart from the bounds checking, I also made a little check on the type of value being set. I modified the code a little bit, because using "is" creates more solid code than using GetType() (see below). The is keyword checks for parent objects, and the GetType() only checks for the type. Below is the code that I replaced:&lt;br /&gt;&lt;br /&gt;&lt;/datatype&gt;&lt;/datatype&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;                  &lt;span class="rem"&gt;//Make a type check, just in case&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt; &lt;span class="kwrd"&gt;is&lt;/span&gt; Item)&lt;br /&gt;                  {&lt;br /&gt;                      Exception myExcp =&lt;br /&gt;                          &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"You can only assign objects of the type \"Item\""&lt;/span&gt;);&lt;br /&gt;                      &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;                          &lt;br /&gt;                  }&lt;br /&gt;                  &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;                  {&lt;br /&gt;                      &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos] = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;                  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;Instead of:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;                  &lt;span class="rem"&gt;//Make a type check, just in case&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt;.GetType() == &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Item))&lt;br /&gt;                  {&lt;br /&gt;                      Exception myExcp =&lt;br /&gt;                          &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"You can only assign objects of the type \"Item\""&lt;/span&gt;);&lt;br /&gt;                      &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;                          &lt;br /&gt;                  }&lt;br /&gt;                  &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;                  {&lt;br /&gt;                      &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos] = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;                  }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The set accessor first checks whether the index passed resides within the collection's bounds (more than -1, less than the count of number of items), and then checks for the type being set; after modification of the code, an object derived from Item will also be accepted in the Indexer.&lt;br /&gt;&lt;br /&gt;Note that I also implemented an AddItem method, which allows users to kick in Items into the collection (without which, this whole class would be useless), and a Count property, which allows users to get the number of total items inside of the class. Of course, I could've elaborated, implemented a Delete method and so on, but that's up to you. Below is the code that I used to make the Item and ItemHolder classes work:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;      [STAThread]&lt;br /&gt;      &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;      {&lt;br /&gt;          Item myItem1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item(&lt;span class="str"&gt;"Rowan"&lt;/span&gt;,&lt;br /&gt;              &lt;span class="str"&gt;"Shit happens"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;          Item myItem2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item(&lt;span class="str"&gt;"Vidi"&lt;/span&gt;,&lt;br /&gt;              &lt;span class="str"&gt;"Life is a bitch, and then you die"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;          Item myItem3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item(&lt;span class="str"&gt;"Natasha"&lt;/span&gt;,&lt;br /&gt;              &lt;span class="str"&gt;"Good girls go to heaven, Bad girls get what they want"&lt;/span&gt;);&lt;br /&gt;        &lt;br /&gt;          ItemHolder holder = &lt;span class="kwrd"&gt;new&lt;/span&gt; ItemHolder();&lt;br /&gt;          holder.AddItem(myItem1);&lt;br /&gt;          holder.AddItem(myItem2);&lt;br /&gt;          holder.AddItem(myItem3);&lt;br /&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0; i&amp;lt;=holder.Count-1; i++)&lt;br /&gt;          {&lt;br /&gt;              Console.WriteLine(&lt;span class="str"&gt;"Name: "&lt;/span&gt; + holder[i].Name);&lt;br /&gt;              Console.WriteLine(&lt;span class="str"&gt;"Quote: "&lt;/span&gt; + holder[i].Data);&lt;br /&gt;              Console.WriteLine();&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          Console.ReadLine();&lt;br /&gt;      }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here's the complete code for the tutorial:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Indexer&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// Comments are pretty useful, even in tutorials&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;class&lt;/span&gt; IndexerTest&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Main entry pt. for app.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      [STAThread]&lt;br /&gt;      &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;      {&lt;br /&gt;          Item myItem1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item(&lt;span class="str"&gt;"Rowan"&lt;/span&gt;,&lt;br /&gt;              &lt;span class="str"&gt;"Shit happens"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;          Item myItem2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item(&lt;span class="str"&gt;"Vidi"&lt;/span&gt;,&lt;br /&gt;              &lt;span class="str"&gt;"Life is a bitch, and then you die"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;          Item myItem3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item(&lt;span class="str"&gt;"Natasha"&lt;/span&gt;,&lt;br /&gt;              &lt;span class="str"&gt;"Good girls go to heaven, Bad girls get what they want"&lt;/span&gt;);&lt;br /&gt;        &lt;br /&gt;          ItemHolder holder = &lt;span class="kwrd"&gt;new&lt;/span&gt; ItemHolder();&lt;br /&gt;          holder.AddItem(myItem1);&lt;br /&gt;          holder.AddItem(myItem2);&lt;br /&gt;          holder.AddItem(myItem3);&lt;br /&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0; i&amp;lt;=holder.Count-1; i++)&lt;br /&gt;          {&lt;br /&gt;              Console.WriteLine(&lt;span class="str"&gt;"Name: "&lt;/span&gt; + holder[i].Name);&lt;br /&gt;              Console.WriteLine(&lt;span class="str"&gt;"Quote: "&lt;/span&gt; + holder[i].Data);&lt;br /&gt;              Console.WriteLine();&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          Console.ReadLine();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// Just a dummy class named Item, with a few properties.&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Item&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;//Name represents the name of the item class&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;&lt;br /&gt;      &lt;span class="rem"&gt;//Data represents a data value&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; data;&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Constructor for the Item class.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="name"&amp;gt;String representing the name of the class&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="data"&amp;gt;Data the class will hold&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; Item(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;string&lt;/span&gt; data)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = name;&lt;br /&gt;          &lt;span class="kwrd"&gt;this&lt;/span&gt;.data = data;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Gets or sets the name of the class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.name;&lt;br /&gt;          }&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Gets or sets the it's data value&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Data&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.data;&lt;br /&gt;          }&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.data = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// - Little Note -&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// It's always good to use properties instead of&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// directly exposing a variable as public&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// A class that can hold Items&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ItemHolder&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;//This arraylist will actually contain all the items&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; ArrayList itemList;&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Creates a new instance of the ItemHolder class, which is able&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// to hold multiple items.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; ItemHolder()&lt;br /&gt;      {&lt;br /&gt;          itemList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Indexer for the ItemHolder class&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; Item &lt;span class="kwrd"&gt;this&lt;/span&gt;[&lt;span class="kwrd"&gt;int&lt;/span&gt; pos]&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="rem"&gt;//Check whether the position is within the arraylist's index bounds&lt;/span&gt;&lt;br /&gt;              &lt;span class="kwrd"&gt;if&lt;/span&gt; ((pos &amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count-1) || (pos &amp;lt; 0))&lt;br /&gt;              {&lt;br /&gt;                  Exception myExcp =&lt;br /&gt;                      &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Index was out of bounds of array"&lt;/span&gt;);&lt;br /&gt;                  &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;              }&lt;br /&gt;              &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;              {&lt;br /&gt;                  &lt;span class="rem"&gt;//typecast to Item, and return&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;return&lt;/span&gt; ((Item)&lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos]);&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          set&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="rem"&gt;//Check whether the position is within the arraylist's index bounds&lt;/span&gt;&lt;br /&gt;              &lt;span class="kwrd"&gt;if&lt;/span&gt; ((pos &amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count-1) || (pos &amp;lt; 0))&lt;br /&gt;              {&lt;br /&gt;                  Exception myExcp =&lt;br /&gt;                      &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Index was out of bounds of array"&lt;/span&gt;);&lt;br /&gt;                  &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;              }&lt;br /&gt;              &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;              {&lt;br /&gt;                  &lt;span class="rem"&gt;//Make a type check, just in case&lt;/span&gt;&lt;br /&gt;                  &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt; &lt;span class="kwrd"&gt;is&lt;/span&gt; Item)&lt;br /&gt;                  {&lt;br /&gt;                      Exception myExcp =&lt;br /&gt;                          &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"You can only assign objects of the type \"Item\""&lt;/span&gt;);&lt;br /&gt;                      &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;                          &lt;br /&gt;                  }&lt;br /&gt;                  &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;                  {&lt;br /&gt;                      &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList[pos] = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;                  }&lt;br /&gt;              }              &lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Adds an item to the collection of Items&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="someItem"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddItem(Item someItem)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="rem"&gt;//Check whether the item's not null&lt;/span&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (someItem != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Add(someItem);&lt;br /&gt;          }&lt;br /&gt;          &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;          {&lt;br /&gt;              Exception myExcp =&lt;br /&gt;                  &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"Null objects are not allowed in this collection"&lt;/span&gt;);&lt;br /&gt;              &lt;span class="kwrd"&gt;throw&lt;/span&gt; myExcp;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Returns a count of the total number of items inside&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// the this object&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Count&lt;br /&gt;      {&lt;br /&gt;          get&lt;br /&gt;          {&lt;br /&gt;              &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.itemList.Count;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112189727626369166?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112189727626369166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112189727626369166&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112189727626369166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112189727626369166'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/indexers.html' title='Indexers'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112134972924140917</id><published>2005-07-14T18:01:00.000+04:00</published><updated>2005-07-15T00:51:57.980+04:00</updated><title type='text'>IComparer Interface</title><content type='html'>&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;Sorting out your problems&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;[Intermediate]&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I made a small but cute class for Person - there's Name, which identifies the person's name and there's Age, which represents the person's age.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;Creating multiple instances of the persons class would require me to kick them all into an ArrayList - which I did. I had a precise idea in mind: I wanted the ArrayList to sort my list of Persons by either name or age.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;This is when I learnt about the IComparer and IComparable interfaces. However, in this tutorial, we're going to focus on the IComparer interface. &lt;span style="font-weight: bold;"&gt;Please note that the IComparer interface requires the use of System.Collections.&lt;/span&gt; Below is the code for my Person class.&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// The Person class contains the name of the person and the age of&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// the person.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Person&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//private string holding person's name&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;//private int holding person's age&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; age;&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Creates a new Person object with the specified name and age.&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="name"&amp;gt;The name of the person&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="age"&amp;gt;The age of the person&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; Person(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;int&lt;/span&gt; age)&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = name;&lt;br /&gt;     &lt;span class="kwrd"&gt;this&lt;/span&gt;.age - age;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Gets or sets the name of the person&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name&lt;br /&gt; {&lt;br /&gt;     get&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.name;&lt;br /&gt;     }&lt;br /&gt;     set&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Gets or sets the age of the person&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Age&lt;br /&gt; {&lt;br /&gt;     get&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.age;&lt;br /&gt;     }&lt;br /&gt;     set&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="kwrd"&gt;this&lt;/span&gt;.age = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;A class implementing the IComparer interface can be passed onto the ArrayList.Sort method to provide the latter with a means of comparing two values. Why compare two values? Simple, because the QuickSort algorithm (which the arraylist obviously implements) works by consecutively comparing two values. Any quicksort algorithm can easily be adapted on a set of data, given the comparing method.&lt;br /&gt;&lt;br /&gt;What's left to do is to create a class which implements the IComparer method. Also, we might wish to allow for "customization" of that class, i.e. allow different means of sorting. To do this, I created an enumerated type which would hold the different types of sorting. See the code below:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Enumerator for types of person sorting&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; SortPersonsBy {byName, byAge};&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Person Sorting Class, implements IComparer&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SortPersons : IComparer&lt;br /&gt;{&lt;br /&gt;   &lt;span class="rem"&gt;//Private value holding the Persons sort type&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; SortPersonsBy sortType;&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Creates a new instance of the SortPersons class. Use this class to specify sorting&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// methods for arraylists filled with only persons.&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;param name="sortingType"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; SortPersons(SortPersonsBy sortingType)&lt;br /&gt;   {&lt;br /&gt;       &lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType = sortingType;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Gets or sets the SortPersonsBy type.&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; SortPersonsBy SortType&lt;br /&gt;   {&lt;br /&gt;       get&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType;&lt;br /&gt;       }&lt;br /&gt;       set&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// Implementation of the Compare method, required for the IComparer class&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;param name="x"&amp;gt;First object&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;param name="y"&amp;gt;Second object&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;An int, which is the value obtained when the two objects&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// have been compared.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Compare(&lt;span class="kwrd"&gt;object&lt;/span&gt; x, &lt;span class="kwrd"&gt;object&lt;/span&gt; y)&lt;br /&gt;   {&lt;br /&gt;       &lt;span class="rem"&gt;//Check whether x and y are both Person classes.&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;if&lt;/span&gt; ((x &lt;span class="kwrd"&gt;is&lt;/span&gt; Person) &amp;&amp;amp; (y &lt;span class="kwrd"&gt;is&lt;/span&gt; Person))&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="rem"&gt;//Some little typecasting&lt;/span&gt;&lt;br /&gt;           Person a = (Person)x;&lt;br /&gt;           Person b = (Person)y;&lt;br /&gt;&lt;br /&gt;           &lt;span class="rem"&gt;//Check the sorting type&lt;/span&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType == SortPersonsBy.byName)&lt;br /&gt;           {&lt;br /&gt;               &lt;span class="rem"&gt;//Use the native string.CompareTo method&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwrd"&gt;return&lt;/span&gt; (a.Name.CompareTo(b.Name));&lt;br /&gt;           }&lt;br /&gt;           &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;           {&lt;br /&gt;               &lt;span class="rem"&gt;//Use the native int.CompareTo method&lt;/span&gt;&lt;br /&gt;               &lt;span class="kwrd"&gt;return&lt;/span&gt; (a.Age.CompareTo(b.Age));&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;       &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;       {&lt;br /&gt;           &lt;span class="rem"&gt;//return 0 if x or y are of wrong type&lt;/span&gt;&lt;br /&gt;           &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The code above contains an enumerated type and a SortPersons class, which implements the IComparer interface. The SortPersons class has a SortPersonsBy property, which allows the user to choose between sorting by name and sorting by age.&lt;br /&gt;&lt;br /&gt;When the ArrayList.Sort() method is called with a SortPersons class, the Compare method is executed numerous times. First of all, my Compare method checks for the types of objects - i.e. whether they are persons or not. If one of them isn't a Person class, the Compare method returns 0. If they both are Person classes, the type of sorting is checked. If the type of sorting is set to "byName", the string's CompareTo method is called using the two person's names; if the type of sorting is set to "byAge", the int's CompareTo method is called using the two person's ages.&lt;br /&gt;&lt;br /&gt;And that's it! Here's the full source code of my app:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; SortProject&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// The Main Class&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainClass&lt;br /&gt; {&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Con. App. Entry Pt.&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     [STAThread]&lt;br /&gt;     &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="rem"&gt;//Create a few persons&lt;/span&gt;&lt;br /&gt;         Person a = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"Rowan"&lt;/span&gt;, 19);&lt;br /&gt;         Person b = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"Rishi"&lt;/span&gt;, 19);&lt;br /&gt;         Person c = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"Vidisha"&lt;/span&gt;, 18);&lt;br /&gt;         Person d = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"Dominique"&lt;/span&gt;, 21);&lt;br /&gt;         Person e = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"Arvind"&lt;/span&gt;, 22);&lt;br /&gt;         Person f = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"Mom"&lt;/span&gt;, 49);&lt;br /&gt;         Person g = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person(&lt;span class="str"&gt;"Visitor"&lt;/span&gt;, -1);&lt;br /&gt;&lt;br /&gt;         &lt;span class="rem"&gt;//Create a SortPersons object, and set the sorting type to "byName"&lt;/span&gt;&lt;br /&gt;         SortPersons mySortingMethod = &lt;span class="kwrd"&gt;new&lt;/span&gt; SortPersons(SortPersonsBy.byName);&lt;br /&gt;      &lt;br /&gt;         &lt;span class="rem"&gt;//Create a new arraylist and kick in the persons&lt;/span&gt;&lt;br /&gt;         ArrayList someList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();&lt;br /&gt;         someList.Add(a);&lt;br /&gt;         someList.Add(b);&lt;br /&gt;         someList.Add(c);&lt;br /&gt;         someList.Add(d);&lt;br /&gt;         someList.Add(e);&lt;br /&gt;         someList.Add(f);&lt;br /&gt;         someList.Add(g);&lt;br /&gt;         someList.Sort(mySortingMethod);&lt;br /&gt;    &lt;br /&gt;         Console.WriteLine(&lt;span class="str"&gt;"Sorting persons by name: \n\n"&lt;/span&gt;);&lt;br /&gt;      &lt;br /&gt;         &lt;span class="rem"&gt;//Display the list of persons&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0; i&amp;lt;= someList.Count-1; i++)&lt;br /&gt;         {&lt;br /&gt;             Person somePerson = ((Person)someList[i]);&lt;br /&gt;             Console.WriteLine(&lt;span class="str"&gt;"Person Name: "&lt;/span&gt; + somePerson.Name +&lt;br /&gt;                               &lt;span class="str"&gt;"\t\tPerson Age: "&lt;/span&gt; + somePerson.Age);&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;         Console.WriteLine(&lt;span class="str"&gt;"Sorting the persons by age: \n\n"&lt;/span&gt;);&lt;br /&gt;      &lt;br /&gt;         &lt;span class="rem"&gt;//Set the sorting type to "byAge" and resort the ilst&lt;/span&gt;&lt;br /&gt;         mySortingMethod.SortType = SortPersonsBy.byAge;&lt;br /&gt;         someList.Sort(mySortingMethod);&lt;br /&gt;      &lt;br /&gt;         &lt;span class="rem"&gt;//Re-Display the list of persons&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0; i&amp;lt;= someList.Count-1; i++)&lt;br /&gt;         {&lt;br /&gt;             Person somePerson = ((Person)someList[i]);&lt;br /&gt;             Console.WriteLine(&lt;span class="str"&gt;"Person Name: "&lt;/span&gt; + somePerson.Name +&lt;br /&gt;                               &lt;span class="str"&gt;"\t\tPerson Age: "&lt;/span&gt; + somePerson.Age);&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;         Console.ReadLine();&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// The Person class contains the name of the person and the age of&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// the person.&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Person&lt;br /&gt; {&lt;br /&gt;     &lt;span class="rem"&gt;//private string holding person's name&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;//private int holding person's age&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; age;&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Creates a new Person object with the specified name and age.&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="name"&amp;gt;The name of the person&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="age"&amp;gt;The age of the person&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; Person(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;int&lt;/span&gt; age)&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = name;&lt;br /&gt;         &lt;span class="kwrd"&gt;this&lt;/span&gt;.age = age;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Gets or sets the name of the person&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name&lt;br /&gt;     {&lt;br /&gt;         get&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.name;&lt;br /&gt;         }&lt;br /&gt;         set&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="kwrd"&gt;this&lt;/span&gt;.name = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Gets or sets the age of the person&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Age&lt;br /&gt;     {&lt;br /&gt;         get&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.age;&lt;br /&gt;         }&lt;br /&gt;         set&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="kwrd"&gt;this&lt;/span&gt;.age = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Enumerator for types of person sorting&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; SortPersonsBy {byName, byAge};&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Person Sorting Class, implements IComparer&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SortPersons : IComparer&lt;br /&gt; {&lt;br /&gt;     &lt;span class="rem"&gt;//Private value holding the Persons sort type&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;private&lt;/span&gt; SortPersonsBy sortType;&lt;br /&gt;  &lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Creates a new instance of the SortPersons class. Use this class to specify sorting&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// methods for arraylists filled with only persons.&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="sortingType"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; SortPersons(SortPersonsBy sortingType)&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType = sortingType;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Gets or sets the SortPersonsBy type.&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; SortPersonsBy SortType&lt;br /&gt;     {&lt;br /&gt;         get&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType;&lt;br /&gt;         }&lt;br /&gt;         set&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// Implementation of the Compare method, required for the IComparer class&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="x"&amp;gt;First object&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;param name="y"&amp;gt;Second object&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;An int, which is the value obtained when the two objects&lt;/span&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/// have been compared.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Compare(&lt;span class="kwrd"&gt;object&lt;/span&gt; x, &lt;span class="kwrd"&gt;object&lt;/span&gt; y)&lt;br /&gt;     {&lt;br /&gt;         &lt;span class="rem"&gt;//Check whether x and y are both Person classes.&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;if&lt;/span&gt; ((x &lt;span class="kwrd"&gt;is&lt;/span&gt; Person) &amp;&amp;amp; (y &lt;span class="kwrd"&gt;is&lt;/span&gt; Person))&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="rem"&gt;//Some little typecasting&lt;/span&gt;&lt;br /&gt;             Person a = (Person)x;&lt;br /&gt;             Person b = (Person)y;&lt;br /&gt;&lt;br /&gt;             &lt;span class="rem"&gt;//Check the sorting type&lt;/span&gt;&lt;br /&gt;             &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.sortType == SortPersonsBy.byName)&lt;br /&gt;             {&lt;br /&gt;                 &lt;span class="rem"&gt;//Use the native string.CompareTo method&lt;/span&gt;&lt;br /&gt;                 &lt;span class="kwrd"&gt;return&lt;/span&gt; (a.Name.CompareTo(b.Name));&lt;br /&gt;             }&lt;br /&gt;             &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;             {&lt;br /&gt;                 &lt;span class="rem"&gt;//Use the native int.CompareTo method&lt;/span&gt;&lt;br /&gt;                 &lt;span class="kwrd"&gt;return&lt;/span&gt; (a.Age.CompareTo(b.Age));&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;         &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="rem"&gt;//return 0 if x or y are of wrong type&lt;/span&gt;&lt;br /&gt;             &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112134972924140917?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112134972924140917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112134972924140917&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112134972924140917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112134972924140917'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/icomparer-interface.html' title='IComparer Interface'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14483960.post-112134814902854286</id><published>2005-07-14T17:26:00.000+04:00</published><updated>2005-07-14T17:35:49.033+04:00</updated><title type='text'>Introduction</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;Do You See Sharp?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Welcome to my Blog! It's not exactly a blog, it's more of a tutorial-oriented consecutive series of html pages organised into a blog.&lt;br /&gt;&lt;br /&gt;I don't really have time (nor the necessary funds :( ) to buy webspace - but hey! Blogger's here to help :)&lt;br /&gt;&lt;br /&gt;Anyway, let me post this and move on to the first C# tutorial!&lt;br /&gt;&lt;br /&gt;Rowy&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14483960-112134814902854286?l=iseesharp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iseesharp.blogspot.com/feeds/112134814902854286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14483960&amp;postID=112134814902854286&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112134814902854286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14483960/posts/default/112134814902854286'/><link rel='alternate' type='text/html' href='http://iseesharp.blogspot.com/2005/07/introduction.html' title='Introduction'/><author><name>Rowy</name><uri>http://www.blogger.com/profile/17145611675434428142</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
