سؤال

هل يوجد VB.NET مكافئ لـ C#؟ ?? المشغل أو العامل؟

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

المحلول

استخدم المشغل If() مع اثنين من الحجج (<لأ href = "https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator#if-operator- يسمى مع اثنين من الحجج "يختلط =" noreferrer "> مايكروسوفت وثائق ):

' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6

' Variable first <> Nothing, so its value, 3, is returned.
Console.WriteLine(If(first, second))

second = Nothing
' Variable first <> Nothing, so the value of first is returned again. 
Console.WriteLine(If(first, second))

first = Nothing second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))

نصائح أخرى

ال IF() يجب على المشغل أن يقوم بالخدعة نيابةً عنك:

value = If(nullable, defaultValueIfNull)

http://visualstudiomagazine.com/listings/list.aspx?id=252

الإجابة المقبولة ليس لها أي تفسير على الإطلاق وهي مجرد رابط.
لذلك، فكرت في ترك إجابة تشرح كيفية القيام بذلك If أعمال المشغل مأخوذة من MSDN:


إذا كان المشغل (Visual Basic)

يستخدم تقييم الدائرة القصيرة لإعادة مشروط واحدة من قيمتين.ال لو يمكن استدعاء المشغل بثلاث وسيطات أو مع وسيطتين.

If( [argument1,] argument2, argument3 )


إذا اتصل المشغل بحجتين

الحجة الأولى ل لو يمكن حذف.يمكّن هذا المشغل من استخدام وسيطين فقط.تنطبق القائمة التالية فقط عندما تكون لو يتم استدعاء عامل التشغيل باستخدام وسيطتين.


القطع

Term         Definition
----         ----------

argument2    Required. Object. Must be a reference or nullable type. 
             Evaluated and returned when it evaluates to anything 
             other than Nothing.

argument3    Required. Object.
             Evaluated and returned if argument2 evaluates to Nothing.


عندما منطقية تم حذف الوسيطة ، يجب أن تكون الوسيطة الأولى مرجعية أو نوعًا لاغية.إذا تم تقييم الوسيطة الأولى إلى لا شئ, ، يتم إرجاع قيمة الوسيطة الثانية.وفي كافة الحالات الأخرى، يتم إرجاع قيمة الوسيطة الأولى.يوضح المثال التالي كيف يعمل هذا التقييم.


VB

' Variable first is a nullable type. 
Dim first? As Integer = 3
Dim second As Integer = 6

' Variable first <> Nothing, so its value, 3, is returned.
Console.WriteLine(If(first, second))

second = Nothing 
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))

first = Nothing
second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))

مثال على كيفية التعامل مع أكثر من قيمتين (nested ifس):

Dim first? As Integer = Nothing
Dim second? As Integer = Nothing
Dim third? As Integer = 6
' The LAST parameter doesn't have to be nullable.
'Alternative: Dim third As Integer = 6

' Writes "6", because the first two values are "Nothing".
Console.WriteLine(If(first, If(second, third)))

يمكنك استخدام طريقة التمديد.هذا واحد يعمل مثل SQL COALESCE وربما يكون الأمر مبالغًا فيه بالنسبة لما تحاول اختباره، لكنه يعمل.

    ''' <summary>
    ''' Returns the first non-null T based on a collection of the root object and the args.
    ''' </summary>
    ''' <param name="obj"></param>
    ''' <param name="args"></param>
    ''' <returns></returns>
    ''' <remarks>Usage
    ''' Dim val as String = "MyVal"
    ''' Dim result as String = val.Coalesce(String.Empty)
    ''' *** returns "MyVal"
    '''
    ''' val = Nothing
    ''' result = val.Coalesce(String.Empty, "MyVal", "YourVal")
    ''' *** returns String.Empty
    '''
    ''' </remarks>
    <System.Runtime.CompilerServices.Extension()> _
    Public Function Coalesce(Of T)(ByVal obj As T, ByVal ParamArray args() As T) As T

        If obj IsNot Nothing Then
            Return obj
        End If

        Dim arg As T
        For Each arg In args
            If arg IsNot Nothing Then
                Return arg
            End If
        Next

        Return Nothing

    End Function

المدمج في If(nullable, secondChoice) يمكن التعامل معها فقط اثنين اختيارات لاغية.هنا يمكن للمرء Coalesce العديد من المعلمات حسب الرغبة.سيتم إرجاع أول واحد غير فارغ، ولن يتم تقييم بقية المعلمات بعد ذلك (دائرة قصيرة، مثل AndAlso/&& و OrElse/|| )

والقيد واحد كبير لمعظم هذه الحلول هو أنها لن تقوم ماس كهربائى. وبالتالي فهي ليست يعادل في الواقع إلى ؟؟

والمدمج في "لو" المشغل، سوف يتم تقييم المعلمات اللاحقة ما لم تقيم المعلمة السابقة الى لا شيء.

والبيانات التالية متكافئة.

وC #

var value = expression1 ?? expression2 ?? expression3 ?? expression4;

وVB

dim value = if(exression1,if(expression2,if(expression3,expression4)))

وهذا سيعمل في جميع الحالات التي يكون فيها "؟؟" يعمل. أي من الحلول الأخرى يجب أن يتم استخدامها بحذر شديد، لأنها يمكن بسهولة إدخال الخلل وقت التشغيل.

وتحقق مايكروسوفت وثائق حول إذا المشغل (البصرية الأساسية) هنا: <لأ href = "https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator" يختلط = "نوفولو noreferrer"> https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/if-operator

If( [argument1,] argument2, argument3 )

وفيما يلي بعض الأمثلة (VB.Net)

' This statement prints TruePart, because the first argument is true.
Console.WriteLine(If(True, "TruePart", "FalsePart"))

' This statement prints FalsePart, because the first argument is false.
Console.WriteLine(If(False, "TruePart", "FalsePart"))

Dim number = 3
' With number set to 3, this statement prints Positive.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))

number = -1
' With number set to -1, this statement prints Negative.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top