مشخصات مقاله
-
4292
-
0.0
-
16907
-
0
-
0
دستور switch (switch statement) در سی شارپ
گاهی لازم است تا مقدار یک متغیر با چندین مقدار از پیش مشخص مقایسه شده و بر اساس نتیجه این مقایسه تصمیم گیری شود. دستور switch برای این موارد گزینه مناسبی است.
هنگام تعریف عبارت (که نتیجه ی آن به اجرای برنامه ی خاصی منجر می شود)، دستور switch نتیجه را ارزیابی و بررسی می کند و براساس نتیجه ی احتمالی آن عبارت، دستور را اجرا می کند. به این نتیجه ی احتمالی case می گویند. نتایج حاصله در بدنه ی اصلی دستور switch فهرست شده و هر case (نتیجه ی ممکن) در صورت لزوم باید جداگانه اجرا شود. بدنه ی اصلی دستور switch داخل کاراکترهای " { " و " } " محصور می شود. ترکیب نحوی دستور switch به صورت زیر می باشد.
switch(Expression)
{
case Choice 1:
Statement 1;
break;
case Choice 2:
Statement 2;
break;
case Choice n:
Statement n;
break;
}
در زبان C++، می توان کلید واژه ی break را از case حذف کرد. به عبارت دقیق تر، پس از اینکه کد مورد نظر در case اجرا می شود به دلیل عدم وجود break، case بعدی اجرا می شود که منجر به سردرگمی و بروز مشکلات در عملیات می شود. اما در زبان برنامه نویسی C#، به منظور جلوگیری از بروز این رخداد، لازم است انتهای هر case وقفه در کد ایجاد شود. پروسه ی ایجاد وقفه با استفاده از کلید واژه ی break امکان پذیر می باشد. عبارتی که در دستور case مورد بررسی قرار می گیرد یک عدد صحیح یا integer می باشد. به این خاطر که عضو شمارنده (enum) و نوع داده های کاراکتر مورد نظر (char) فرم های دیگر integer هستند، از آن ها نیز می توان استفاده کرد. در مثال زیر دستور switch مورد استفاده قرار گرفته است.
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
type = HouseType.SingleFamily;
break;
case 2:
type = HouseType.Townhouse;
break;
case 3:
type = HouseType.Condominium;
break;
}
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
var answer = int.Parse(Console.ReadLine());
if (answer == 1)
garage = "Yes";
else
garage = "No";
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
Console.ReadLine();
return 0;
}
}
هنگام تصدیق نتایج احتمالی که دستور switch بررسی می کند، گاهی احتمالاتی جز آنچه فهرست شده وجود دارد. case مزبور با کلیدواژه ی default مدیریت می شود. case پیش فرض (default case) زمانی لحاظ می شود که هیچ یک از case های فهرست شده با پاسخ یا نتیجه ی عرضه شده همخوانی یا تطابق نداشته باشد. ترکیب نحوی دستور switch که case پیش فرض را مورد بررسی قرار می دهد به ترتیب زیر می باشد.
switch(Expression)
{
case Choice1:
Statement1;
break;
case Choice2:
Statement2;
break;
case Choice-n:
Statement-n;
break;
default:
Other-Possibility;
break;
}
در C++، بخش defaultبه این خاطر که آخرین قسمت switch محسوب می شود نیازی به کلید واژه ی break نیست. اما در زبان C#، هر case و بخش default باید مکانیزم خروج خود را داشته باشد که با کلید واژه ی break انجام می پذیرد. بنابراین، ورژن دیگر برنامه ی بالا به صورت زیر می باشد.
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice?");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
type = HouseType.SingleFamily;
break;
case 2:
type = HouseType.Townhouse;
break;
case 3:
type = HouseType.Condominium;
break;
default:
type = HouseType.Unknown;
break;
}
Console.Write("Does the house have an indoor garage (1=Yes/0=No)?");
var answer = int.Parse(Console.ReadLine());
if (answer == 1)
garage = "Yes";
else
garage = "No";
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
نمونه ای از اجرای برنامه
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 8 Does the house have an indoor garage (1=Yes/0=No)? 2 Desired House Type: Unknown Has indoor garage? No Press any key to continue...
گذشته از مقدار نوع int، می توان دیگر نوع های اعداد صحیح را در دستور switch به کار برد. به عنوان مثال، می توان با استفاده از حروف، case ها را اعتبار سنجی کرد. به مثال زیر توجه کنید.
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
type = HouseType.SingleFamily;
break;
case 2:
type = HouseType.Townhouse;
break;
case 3:
type = HouseType.Condominium;
break;
default:
type = HouseType.Unknown;
break;
}
Console.Write("Does the house have an indoor garage (y/n)? ");
var answer = char.Parse(Console.ReadLine());
switch (answer)
{
case 'y':
garage = "Yes";
break;
case 'Y':
garage = "Yes";
break;
case 'n':
garage = "No";
break;
case 'N':
garage = "No";
break;
default:
garage = "Not Specified";
break;
}
Console.WriteLine("\nDesired House Type: {0}"، type);
Console.WriteLine("Has indoor garage? {0}"، garage);
return 0;
}
}
نمونه ای از اجرای برنامه
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 3 Does the house have an indoor garage (y/n)? y Desired House Type: Condominium Has indoor garage? Yes Press any key to continue...
گذشته از مقدار نوع int، می توان دیگر نوع های اعداد صحیح را در دستور switch به کار برد. به عنوان مثال، می توان با استفاده از حروف، case ها را اعتبار سنجی کرد. به مثال زیر توجه کنید.