هل يمكنني تنفيذ عائد العائد لوظائف IEnumerable في VB.NET؟[ينسخ]

StackOverflow https://stackoverflow.com/questions/875587

سؤال

التكرار المحتمل:
العائد في VB.NET

في C#، عند كتابة دالة تُرجع ملفًا IEnumerble<>, ، يمكنك استخدام yield return لإرجاع عنصر واحد من التعداد و yield break; للدلالة على عدم وجود عناصر متبقية.ما هو بناء جملة VB.NET للقيام بنفس الشيء؟

مثال من عشاء الطالب الذي يذاكر كثيرا شفرة:

public IEnumerable<RuleViolation> GetRuleViolations() {

   if (String.IsNullOrEmpty(Title))
       yield return new RuleViolation("Title required","Title");

   if (String.IsNullOrEmpty(Description))
       yield return new RuleViolation("Description required","Description");

   if (String.IsNullOrEmpty(HostedBy))
       yield return new RuleViolation("HostedBy required", "HostedBy");

   if (String.IsNullOrEmpty(Address))
       yield return new RuleViolation("Address required", "Address");

   if (String.IsNullOrEmpty(Country))
       yield return new RuleViolation("Country required", "Country");

   if (String.IsNullOrEmpty(ContactPhone))
       yield return new RuleViolation("Phone# required", "ContactPhone");

   if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
       yield return new RuleViolation("Phone# does not match country", "ContactPhone");

   yield break;
}

هذا أداة تحويل C# إلى VB.NET يعطي خطأ "YieldStatement غير مدعوم".

هل كانت مفيدة؟

المحلول

لا يوجد حاليًا ما يعادل عائد العائد الخاص بـ C# في VB.Net من مستوى بناء جملة اللغة.

ومع ذلك، كانت هناك مقالة حديثة في مجلة MSDN بقلم بيل مكارثي حول كيفية تنفيذ نمط مماثل في VB.Net 9.0

نصائح أخرى

الجديد برنامج تحويل الأموال غير المتزامن يتضمن الدعم ل Yield في VB.NET.

يرى التكرارات في Visual Basic للحصول على معلومات حول الاستخدام.

انظر إجاباتي هنا:

كي تختصر:
لا يحتوي VB.Net على العائد، ولكن C# ينفذ العائد عن طريق تحويل التعليمات البرمجية الخاصة بك إلى آلة حالة خلف تلك الكواليس.VB.Net Static تسمح لك الكلمة الأساسية أيضًا بتخزين الحالة داخل إحدى الوظائف، لذلك من الناحية النظرية يجب أن تكون قادرًا على تنفيذ فئة تسمح لك بكتابة تعليمات برمجية مماثلة عند استخدامها كـ Static عضو في الطريقة.

لا عودة العائد في vb.net :( فقط قم بإنشاء قائمة وإعادتها.

خلف الكواليس، يقوم المترجم بإنشاء فئة عداد للقيام بهذا العمل.نظرًا لأن VB.NET لا يطبق هذا النمط، فيجب عليك إنشاء تطبيق خاص بك لـ IEnumerator(Of T)

أدناه يعطي الإخراج:2، 4، 8، 16، 32

في لغة البرمجة VB،

Public Shared Function setofNumbers() As Integer()

    Dim counter As Integer = 0
    Dim results As New List(Of Integer)
    Dim result As Integer = 1
    While counter < 5
        result = result * 2
        results.Add(result)
        counter += 1
    End While
    Return results.ToArray()
End Function

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    For Each i As Integer In setofNumbers()
        MessageBox.Show(i)
    Next
End Sub

شركة#

   private void Form1_Load(object sender, EventArgs e)
    {
        foreach (int i in setofNumbers())
        {
            MessageBox.Show(i.ToString());
        }
    }

    public static IEnumerable<int> setofNumbers()
    {
        int counter=0;
        //List<int> results = new List<int>();
        int result=1;
        while (counter < 5)
        {
          result = result * 2;
          counter += 1;
          yield return result;
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top