C# vers VB.NET [Résolu]

Signaler
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
12 juillet 2011
-
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
12 juillet 2011
-
Bonjour,

Voilà j'ai trouvé une fonction intéressante sur Internet, mais elle est en C#. D'habitude, j'arrive à passer de VB.NET à C# sans problème, mais cette fois je bloque.
Voici le code C# :
items.ToList().ForEach(item =>
            {
              if (item.ActualWidth + offset_x > size.Width)
                item.Visibility = Visibility.Collapsed;
              else
                item.Visibility = Visibility.Visible;
              offset_x += item.ActualWidth;
            });


J'ai commencé à le "traduire" comme ceci :
items.ToList().ForEach(Function(item) If(item.ActualWidth + offset_x > size.Width, item.Visibility Visibility.Collapsed, item.Visibility Visibility.Visible) offset_x += item.ActualWidth)


Mais je ne sais pas où mettre la ligne "offset_x += item.ActualWidth"...


Avez-vous une idée ?

Merci par avance !
Cordialement, Matt

6 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Je ne pense pas que tu puisse utiliser les fonctions anonymes en VB comme c'est fait en C#

Il va falloir que tu créer une vrai fonction avec un paramètre item
items.ToList().ForEach(AddressOf TaFonction)

...

Function TaFonction(ByVal item as ?????)
  If (item.ActualWidth + offset_x > size.Width)
    item.Visibility = Visibility.Collapsed
  Else
    item.Visibility = Visibility.Visible
  End If
  offset_x += item.ActualWidth
End Function


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
12 juillet 2011

Au temps pour moi, il fallait lire "d'habitude j'arrive à passer de C# à VB.NET sans problème"

Cordialement, Matt.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
Salut,
Je ne connaissais pas ce ToList().ForEach

J'espère que ton problème ne se situe pas la.

Pour le If,

ceci
if (item.ActualWidth + offset_x > size.Width)

                item.Visibility = Visibility.Collapsed;

              else

                item.Visibility = Visibility.Visible;

              offset_x += item.ActualWidth;


Est equivalent à ceci

if (item.ActualWidth + offset_x > size.Width)
{
      item.Visibility = Visibility.Collapsed;
}
else
{
      item.Visibility = Visibility.Visible;
}
offset_x += item.ActualWidth;


j'espère que le problème de compréhension vient de là.

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
12 juillet 2011

Bonjour jrivet et casy,

Merci pour vos réponses !

Pour jrivet oui j'avais bien compris que c'était équivalent à ce que vous avez écrit avec les acolades en C#, mais mon problème consistait à traduire cela en VB.NET et à réutiliser ce code au sein d'une fonction anonyme. Le problème venait du fait que je n'arrivais pas à caser la dernière ligne (offset_x += item.ActualWidth) au sein de cette fonction anonyme.

Je n'avais pas pensé à la méthode donnée par casy qui est semble-t-il la plus adaptée à mon cas

Merci beaucoup.

Bien cordialement, Matt.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Méthode qui, à mon avis, aurait du être aussi utilisée en C#

JE ne suis pas du tout un partisan des méthodes anonymes et autres joyeusetés de C# 3.0.

Si, au moment du codage, ça simplifie les choses et ça semble extrêmement puissant, il est, par la suite, bien plus difficile de maintenir un tel code. D'autant plus lorsque le développeur qui doit modifier le code (toujours dans l'urgence, évidement) n'est pas celui qui l'a écrit initialement ni fait l'étude, voire n'a jamais été associé d'une manière ou d'une autre au projet.


Si quelqu'un pouvais confirmer que les méthodes anonymes n'existent pas en VB, j'en serais heureux.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
12 juillet 2011

Effectivement de votre point de vue ce n'est pas pratique du tout.

Il me semble avoir déjà vu des bouts de code en VB.NET du genre :

items.ToList().Where(Function(p) p = Toto)


D'où ma tentative de ne pas passer par une autre fonction afin de traduire le bout de code dont j'ai besoin. Après quelques recherches, il apparaît que sous VB9 les fonctions anonymes s'appellent en fait Expression Trees.

Pour approfondir un peu la chose, j'ai trouvé quelques articles sur Google.

Comme je vous rejoint sur le fait que la maintenance d'un tel code n'est semble-t-il pas très pratique, je préfère utiliser une autre fonction pour mon cas.

Cordialement, Matt