سؤال

لقد بدأت للتو في استخدام 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 أو أي نوع يتكون من قيم مستمرة بدلاً من قيم منفصلة، ​​سيتعين عليك استخدامه ifs للحصول على الإجراء المطلوب.

سبب؟سي# 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;
}

مأخوذة من / المراجع:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top