VB.NET حدد... بيان الحالة المكافئ في C#
-
20-09-2019 - |
سؤال
لقد بدأت للتو في استخدام C# ولدي مشكلتان.هل هناك أي طريقة لترميز مكافئ C# لعبارة VB.NET Select كما يلي؟
Select Object.Name.ToString()
Case "Name1"
'Do something
Case "Name2"
'Do something else
Case Else
'Do the default action
End Select
أي مساعدة سيكون موضع تقدير كبير.
شكرًا على المدخلات حتى الآن، ماذا لو قمت بربط عدة عناصر تحكم بمعالج حدث واحد كما في ما يلي وأريد تنفيذ إجراء مختلف قليلاً لكل عنصر تحكم:
Private Sub Button_Click(sender as Object, e as EventArgs) _
Handles button1.Click, Button2.Click
'do a general activity
Select CType(sender, Button).Name
Case button1.Name
'do something
Case button2.Name
'do something else
Case Else
'do the defalut action
End Select
End Sub
هل هناك أي طريقة لتنفيذ عبارة التحديد أعلاه في C# دون الحاجة إلى استخدام ifs المتداخلة؟
المحلول
لقد وجدت بمرور الوقت أن بعض ملفات VB.NET Select...Case
لا تنطبق البنيات في C# والطريقة الوحيدة هي كتابة الكثير من ifs.
على سبيل المثال، في VB.NET، يمكنك كتابة:
Dim num as Integer = 5
Select Case num
Case 1 to 10
'do something
Case 11 to 20
'do another thing
Case Else
'do the default
End Select
ولكن لا يوجد switch
إنشاء في C# يسمح لك بفعل شيء من هذا النوع.سيتعين عليك الترميز في الدوار كما يلي:
int num = 5;
switch (num)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
//do something
break;
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
//do something else
break;
default:
//do the default
break;
}
أو إذا كنت تعمل مع Double
أو أي نوع يتكون من قيم مستمرة بدلاً من قيم منفصلة، سيتعين عليك استخدامه if
s للحصول على الإجراء المطلوب.
سبب؟سي# switch
يتطلب ثوابت لمختلف case
س.وهذا يختلف عن VB.NET Select Case
مما يسمح بنطاقات الكتابة.
نصائح أخرى
كنت تبحث عن بيان التبديل ...
switch (Object.Name.ToString())
{
case "Name1":
//Do something
break;
default:
//default
break;
}
لاحظ أن الفواصل مستوردة، وإلا فسوف يسقط البرنامج خلال حالاتك.يجب أن تكون قادرًا على العثور على هذا في أي مقدمة لـ C# تقريبًا ...
إستخدم switch
بيان.
switch (object.Name.ToString()) {
case "Name1":
break;
//Do something
case "Name2":
break;
//Do something else
default:
break;
//Do the default action
}
ولا تنس أن هناك أداة تحويل مجانية على الانترنت يتيح لك تحويل VB.NET إلى C # و Viceversa.
مع C # 7، تم تحسين التبديل بشكل كبير, ، من الممكن الآن تطبيق المزيد من الشروط داخل الحالات، على الرغم من أنها لا تزال ليست "نظيفة" مثل إصدار VB. على سبيل المثال، يمكنك أن تفعل شيئا مثل:
switch (examScore)
{
case int es when es >= 90: grade = "A"; break;
case int es when es >= 80: grade = "B"; break;
case int es when es >= 70: grade = "C"; break;
case int es when es >= 60; grade = "D"; break;
default: grade = "F"; break;
}
مأخوذة من / المراجع: