Existe-t-il un équivalent en VB.NET de la fonction C# ??
opérateur ?
IF est l'opérateur de coalescence en VB
Existe-t-il un équivalent en VB.NET de la fonction C# ??
opérateur ?
Utilisez le If()
avec deux arguments ( Documentation Microsoft ) :
' 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))
Je pense que le If()
en VB est la même que l'instruction if...?...:
en C#, et non le ??
opérateur
@LukeTO'Brien C'est si vous l'utilisez avec 3 arguments. Si vous l'utilisez avec 2 arguments, c'est plutôt que ??
(voir une autre réponse à cette question : stackoverflow.com/a/20686360/1474939 )
Réponse ultérieure de Code Maverick donne l'explication MSDN, et des exemples plus détaillés.
La réponse acceptée ne comporte aucune explication et n'est qu'un simple lien.
Par conséquent, j'ai pensé laisser une réponse qui explique comment la If
Les travaux de l'opérateur sont tirés de MSDN :
Utilise l'évaluation du court-circuit pour retourner conditionnellement l'un des deux éléments suivants valeurs. Le site Si peut être appelé avec trois arguments ou avec deux arguments. arguments.
If( [argument1,] argument2, argument3 )
Le premier argument de Si peut être omise. Cela permet d'appeler l'opérateur d'être appelé en utilisant seulement deux arguments. La liste suivante s'applique uniquement lorsque l'opérateur Si est appelé avec deux arguments.
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.
Lorsque le Booléen est omis, le premier argument doit être un référence ou un type nullable. Si le premier argument est évalué à Rien la valeur du second argument est retournée. Dans tous les autres cas, la valeur du premier argument est retournée. L'exemple suivant exemple suivant illustre le fonctionnement de cette évaluation.
' 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))
Un exemple de la façon de traiter plus de deux valeurs (imbriquées). if
s) :
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)))
Vous pouvez utiliser une méthode d'extension. Celle-ci fonctionne comme SQL COALESCE
et c'est probablement exagéré pour ce que vous essayez de tester, mais cela fonctionne.
''' <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
Le système intégré If(nullable, secondChoice)
ne peut traiter que deux des choix annulables. Ici, on peut Coalesce
autant de paramètres que souhaité. Le premier paramètre qui n'est pas nul sera renvoyé, et les autres paramètres ne seront pas évalués par la suite (court-circuités, comme dans le cas de AndAlso
/ &&
y OrElse
/ ||
)
Parce que la langue a un opérateur intégré. Il n'y a aucune raison d'envisager des méthodes d'extension.
Je ne vais pas répéter la réponse de quelqu'un d'autre. Je me suis dit qu'il serait peut-être bon de proposer une autre solution si vous devez vérifier plusieurs valeurs avec une seule instruction. Puisqu'il ne s'agit pas d'une MAUVAISE réponse, faut-il la rétrograder ?
+1 pour fournir une implémentation utilisant des génériques et évitant le casting/boxing/unboxing de type
Cela n'a pas encore été suggéré, mais l'équivalent en VB de l'opérateur " ?" n'est-il pas IIf(condition, résultat vrai, résultat faux) ?
Ejemplo:
Dim postbackText as String = False
IIf(Page.isPostback, postbackText = "Page postback occurred", postbackText = "No postback occured")
Je crois que cette fonctionnalité est disponible depuis 2008 et qu'elle est certainement plus facile que l'utilisation d'une instruction IF, surtout lorsqu'on utilise du code frontal en ligne.
http://msdn.microsoft.com/en-us/library/27ydhh0d(v=vs.90).aspx
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
4 votes
La plupart des réponses données ici (y compris la réponse acceptée) ne sont pas correctes, et ne sont pas fonctionnellement équivalentes à ? ? dans toutes les situations. L'équivalent correct est l'instruction if() avec 2 arguments. Le deuxième argument peut toutefois être imbriqué pour obtenir exactement les mêmes résultats que ? ? avec plusieurs arguments.
0 votes
Voulez-vous dire l'opérateur ternaire ? : par exemple, return ((valeur < 0)?true:false)