ساختارهای تصمیم گیری :

در بسیاری از موارد هنگام برنامه نویسی لازم است تا از عبارات شرطی استفاده کنیم. برای انجام اینکار دو روش عمده وجود دارد. استفاده از if و یا switch . از if بیشتر برای مقایسه هایی تکی و کوچک استفاده می شود و حاصل مقایسه ی آن یا true است و یا false . از عبارت switch هنگامی استفاده می شود که مقایسه های متعددی باید در مورد یک مقدار صورت گیرد.
هر دو عبارت if و switch توسط عبارتهایی Boolean کنترل می شوند ( true و یا false ) . در هنگام استفاده از if اگر عبارت Boolean حاصل اش true باشد اولین قسمت شرط اجرا می شود و سپس برنامه از انتهای if ادامه پیدا می کند. اگر حاصل عبارت Boolean مساوی false باشد کنترل برنامه به قسمت else منتقل می شود.

مثال :

یک پروژه ی جدید console باز کنید و نام آنرا ex04 بگذارید. سپس کد زیر را در آن وارد و جرا کنید :
کد:
using System;

namespace ex04
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
            Console.WriteLine("Enter 1 character to be evaluated");
			
			char cUserInput = (char) Console.Read();

			if ( char.IsDigit( cUserInput ) )
				Console.WriteLine("The char is a number!");
			else
				Console.WriteLine("The char is not a number!");

		}
	}
}
نکاتی در مورد کد فوق :

1- سی شارپ به کوچکی و بزرگی حروف حساس است . برای مثال cUserInput با cUserinput فرق می کند.
2- حتما باید بعد از if پرانتزها ذکر گردد.
3- حتما باید داخل if یک عبارت Boolean ذکر شود مانند if(x>5) .
4- در سی شارپ مقایسه ی تساوی دو عبارت با == و انتساب با = انجام می شود. ( موارد 1 و 4 مواردی هستند که اغلب تازه کاران با آن مشکل دارند! ) برای مثال if(i==3) صحیح است اما if(i=3) در سی شارپ معنایی ندارد.
5- اگر بعد از if یک خط کد قرار گیرد نیازی به آوردن آکولاد ها نیست. هنگامی نیاز به آکولادها می باشد که بیش از یک خط باید بعد از if قرار گیرد.
6- در سی شارپ همانند اسلاف خودش برای تبدیل نوع های داده ایی می توان به صورت زیر نیز عمل کرد : (char) Console.Read() ; یعنی دریافتی Read به char تبدیل می شود .در این مورد باز هم صحبت خواهد شد.
7- همانطور که ذکر شد در سی شارپ همه چیز شیء است حتی نوع های پایه ایی مانند char . با استفاده از متد IsDigit آن می توان چک کرد که آیا ورودی آن عدد است یا خیر؟ ( در مورد متدها صحبت خواهد شد )


استفاده از switch :

بهتر است این مورد را با یک مثال دنبال کنیم.
پروژه ی سی شارپ جدیدی به نام ex05 در حالت console در VS.NET باز کنید. دراینجا می خواهیم یک کلاس جدید تعریف کرده و توسط خاصیتی که در آن ایجاد می کنیم متوجه شویم روز جاری مطابق سیستم چه روزی است .
یک کلاس جدید از منوی پروژه ،‌با استفاده از گزینه ی Add class به برنامه اضافه کنید و نام آنرا در ابتدا clsDate بگذارید.
کد:
using System;

namespace ex05
{
	/// <summary>
	/// Summary description for clsDate.
	/// </summary>
	public class clsDate
	{
		public clsDate()
		{
			//
			// TODO: Add constructor logic here
			//
		}

		public string systemDayOfWeek
		{
			get
			{

				string res="";
				switch( System.DateTime.Now.DayOfWeek.ToString())
				{
					case "Saturday" :
						res =  "شنبه";
						break;

					case "Sunday" :
						res =  "یک شنبه" ;
						break;

					case "Monday":
						res =  "دوشنبه";
						break;

					case "Tuesday":
						res =  "سه شنبه";
						break;

					case "Wednesday":
						res =  "چهار شنبه";
						break;

					case "Thursday":
						res =  "پنج شنبه";
						break;

					case "Friday":
						res =  "جمعه" ;
						break;
				}

				return res ;
			}

		}


	}
}
هنگام ذخیره کردن این کد ویژوال استودیو به شما اخطار می دهد که کد دارای حروف یونیکد است. از منوی فایل گزینه ی advanced save options را انتخاب کنید. در اینجا می توان نوع ذخیره سازی را یونیکد انتخاب کرد.

برای استفاده از کلاس فوق مانند مطالبی که در قسمت قبل گفته شد عمل می کنیم :



کد:
using System;

namespace ex05
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			clsDate m_var = new clsDate();
			Console.WriteLine( m_var.systemDayOfWeek ); 
			Console.ReadLine(); 

		}
	}
}
هر چند حالت console یونیکد را پشتیبانی نمی کند ولی اصل برنامه برای ما مهم است و در آینده بیشتر از آن استفاده خواهیم کرد.

همانطور که ملاحظه کردید اگر از switch استفاده نمی شد باید از 7 عدد if ‌استفاده می گردید که اصلا ظاهر حرفه ای و شکیلی نداشت!
با استفاده از عبارت زیر کار مقایسه شروع می شود. روز سیستم در یافت شده و وارد بدنه ی switch می گردد. سپس توسط case ها چک می شود تا تساوی آن با عبارت بعد از case به اثبات برسد.



کد:
switch( System.DateTime.Now.DayOfWeek.ToString())
اگر هر کدام از عبارات بعد از case صحیح بودند کار پس از آن که در اینجا انتساب است انجام شده و سپس توسط break کنترل برنامه از switch خارج می شود و ادامه ی کار دنبال می گردد.
اگر هیچکدام از case ها صحیح نبودند می توان از گزینه ی default هم در صورت نیاز استفاده کرد. این حالت در یک چنین مواقعی اجرا می گردد.