c #، Switch یک شرط انتخابی است و یک نوع خاص را از لیست موارد چندین مورد بر اساس الگوی مطابقت با عبارت تعریف شده اجرا می کند.
با استفاده از عبارت switch در c #، ما می توانیم عملکرد if ... else را جایگزین کنیم اگر statement برای خوانایی بهتر برای کد باشد
به طور کلی، در دستور سوییچ، مجموعه ای از اظهارات چند مورد است و تنها یک شرط واحد را بر اساس ارزش تطبیقی بیان می کند.
در زیر نحو تعریف عبارت سوئیچ در زبان برنامه نویسی c # است.
شناسه برای چک کردن پس از کلمه کلیدی سوئیچ قرار می گیرد، و سپس لیستی شروط مورد، وجود دارد که در آن ما شناسه را در برابر یک مقدار معین بررسی می کنیم.
شما متوجه خواهید شد که در انتهای هر پرونده ما مقداری برای بررسی داریم . C # صرفا مستلزم آن است که قبل از پایان دادن به بلوک، بلوک قبلی را خاتمه دهد. در صورتی که شما یک تابع نوشتید، می توانید از دستور statement به جای دستور break استفاده کنید
ابتدا یه مثال
sing System;
namespace Conditional
{
class SwitchCase
{
public static void Main(string[] args)
{
char ch;
Console.WriteLine("Enter an Alphabet");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch))
{
case 'a':
Console.WriteLine("sedada");
break;
case 'e':
Console.WriteLine("sedada");
break;
case 'i':
Console.WriteLine("sedada");
break;
case 'o':
Console.WriteLine("sedada");
break;
case 'u':
Console.WriteLine("sedada");
break;
default:
Console.WriteLine("Not a sedada");
break;
}
}
}
}
نتیجه == وقتی یه حرفو مثلا h را وارد کردم نتیجه به شکل زیر نمایش داده شد
Enter an Alphabet
X Not a sedada
مثال بعدی
using System; namespace Conditional { class SwitchCase { public static void Main(string[] args) { char ch; Console.WriteLine("Enter an alphabet"); ch = Convert.ToChar(Console.ReadLine()); switch(Char.ToLower(ch)) { case 'a': case 'e': case 'i': case 'o': case 'u': Console.WriteLine("Vowel"); break; default: Console.WriteLine("Not a vowel"); break; } } } }
خروجی هر دو برنامه همان است. در برنامه فوق، تمام حروف صدادار صدای خروجی را چاپ می کنند و از Statement سوئیچ از بین می روند.
وقتی برنامه اجرا میشه میگه حرفو الفا را واد کنید و حرفی که وارد میشه توسط سوییچ بررسی نتیچه چاپ میشه
هرچند که سوئیچ بیانیه باعث می شود که کد به صورت ساده تر از آنچه که اگر عبارت دیگر باشد، سوئیچ برای کار با انواع داده محدود محدود می شود. سوییچ Statement در C # فقط با این متدها کار میکند:
انواع داده اولیه: bool، char و integral type
انواع شمارش شده (Enum)
کلاس رشته
نوع Nullable انواع داده های بالا
خب کمی بزرگترش میکنیم با عملیات ریاضی
char op; double first, second, result; Console.Write("Enter first number: "); first = Convert.ToDouble(Console.ReadLine()); Console.Write("Enter second number: "); second = Convert.ToDouble(Console.ReadLine()); Console.Write("Enter operator (+, -, *, /): "); op = (char)Console.Read(); switch(op) { case '+': result = first + second; Console.WriteLine("{0} + {1} = {2}", first, second, result); break; case '-': result = first - second; Console.WriteLine("{0} - {1} = {2}", first, second, result); break; case '*': result = first * second; Console.WriteLine("{0} * {1} = {2}", first, second, result); break; case '/': result = first / second; Console.WriteLine("{0} / {1} = {2}", first, second, result); break; default: Console.WriteLine("Invalid Operator"); break; }
نتیجه
Enter first number: 256
Enter second number: 12
Enter operator (+, -, *, /): /
256 / 12 = 21.3333333333333
در مثال زیر را نشان می دهیم یک عبارت سوئیچ که از انواع الگوهای غیر متقابل منحصر به فرد استفاده می کند. اگر پرونده 0 را عوض کنید: بخش switch را تغییر دهید به طوری که دیگر بخش اول در دستور سوئیچ نیست، C # یک خطای کامپایلر را ایجاد می کند، زیرا یک عدد صحیح که مقدار صفر است یک زیر مجموعه از تمام عدد صحیح است، که الگوی مشخص شده در مورد دستور int int
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Switch_p1 { class Program { static void Main(string[] args) { var values = new List<object>(); for (int ctr = 0; ctr <= 7; ctr++) { if (ctr == 2) values.Add(DiceLibrary.Roll2()); else if (ctr == 4) values.Add(DiceLibrary.Pass()); else values.Add(DiceLibrary.Roll()); } Console.WriteLine($"The sum of { values.Count } die is { DiceLibrary.DiceSum(values) }"); Console.ReadKey (); } } } public static class DiceLibrary { static Random rnd = new Random(); public static int Roll() { return rnd.Next(1, 7); } public static List<object> Roll2() { var rolls = new List<object>(); rolls.Add(Roll()); rolls.Add(Roll()); return rolls; } public static int DiceSum(IEnumerable<object> values) { var sum = 0; foreach (var item in values) { switch (item) { case 0: break; case int val: sum += val; break; case IEnumerable<object> subList when subList.Any(): sum += DiceSum(subList); break; case IEnumerable<object> subList: break; case null: break; default: throw new InvalidOperationException("unknown item type"); } } return sum; } public static object Pass() { if (rnd.Next(0, 2) == 0) return null; else return new List<object>(); }}
نتیجه====The sum of 8 die is 27
و پایان یه مثال جالبر تر
بصورت رندوم و البته استاتیک مشخصات شخص رو نمایش میده
Random Rand0 = new Random(); int name0 = Rand0.Next(1, 6); Random Rand1 = new Random(); int Fname1 = Rand0.Next(1, 6); Random Rand2 = new Random(); int address2 = Rand0.Next(1, 6); Random Rand3 = new Random(); int occupation3 = Rand0.Next(1, 6); Random Rand4 = new Random(); int name4 = Rand0.Next(1, 6); string firstName = ""; string sirName = ""; string address = ""; string occupation = ""; switch (name0) { case 1: firstName = "ahmad"; break; case 2: firstName = "ali"; break; case 3: firstName = "hosein"; break; case 4: firstName = "mohsen"; break; case 5: firstName = "vahid"; break; } switch (Fname1) { case 1: sirName = " mahsa"; break; case 2: sirName = " Leila"; break; case 3: sirName = " Sozan"; break; case 4: sirName = " Mitra"; break; case 5: sirName = " Bahar"; break; } switch (Fname1) { case 1: sirName = " akbarpoor"; break; case 2: sirName = " hasani"; break; case 3: sirName = " mohammadi"; break; case 4: sirName = " gaderi"; break; case 5: sirName = " Bahari"; break; } switch (address2) { case 1: address = "tehran-squar imam ali"; break; case 2: address = "Esfahan-no 20"; break; case 3: address = "UrmiaCity Square Kasra"; break; case 4: address = "Rasht Sea side No 45"; break; case 5: address = "24 Road Of Karaj"; break; } switch (occupation3) { case 1: occupation = "Programmer"; break; case 2: occupation = "bikar"; break; case 3: occupation = "Engineer"; break; case 4: occupation = "Driver"; break; case 5: occupation = "Book-Keeper"; break; } Console.WriteLine(firstName + "" + sirName); Console.WriteLine(occupation); Console.WriteLine(address);
امیدوارم استفاده برده باشید