C# vers VB.NET

Résolu
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011 - 14 août 2009 à 02:36
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011 - 14 août 2009 à 17:22
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

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
14 août 2009 à 09:14
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
3
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
14 août 2009 à 02:38
Au temps pour moi, il fallait lire "d'habitude j'arrive à passer de C# à VB.NET sans problème"

Cordialement, Matt.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 août 2009 à 08:41
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
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
14 août 2009 à 12:51
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
14 août 2009 à 16:27
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
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
14 août 2009 à 17:22
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
0
Rejoignez-nous