Bonjour
Comment traduire le mot cléde C# en VB 2010 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Yield
Merci
Bonjour
Comment traduire le mot cléde C# en VB 2010 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Yield
Merci
le mot clé yied en c# est traduit en fonction static (Shared en VB.NET).
l'exemple ci-dessus donne comme résultat: 1,2,3,4,5,6,7,8,9,10
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Shared Function Inc() As Integer() Dim count As Integer = 0 Dim resultats As New List(Of Integer) Dim resultat As Integer = 0 While count <= 10 resultat += 1 resultats.Add(result) count += 1 End While Return resultats.ToArray() End Function
en c#:
Il est disponible en VB.NET 2012, si tu as le 2010, le yeald est inclus dans l'extension Async CTP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public static IEnumerable<int> Inc() { int count=0; int resultat=0; while (count <= 10) { resultat += 1; count += 1; yield return resultat; } }
Merci pour cette explication.
Si je comprend bien ton exemple, désolé je ne connais pas bien la syntaxe de C#,
permet de renvoyer un array de Int ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part yield return resultat;
Je suis aller sur Async CTP.
Dois-je passer en Framework 4.5 ?
Ou dois-je télécharger un patch ?
Merci pour ton aide.
Bernard
Bonsoir
Merci beaucoup pour ton aide précieuse!!
Bernard
De rien, si ça répond à ta question tu peux marquer la discussion comme étant résolue.
Bon dév
je ne connais pas trop yield, ne faisant pas de c#
ce mot clé n'est dispo que depuis vs 2012
j'ai récupéré le lien pour le lire à l'occasion
par contre moi ce que j'en pensait c'est que yield retourne un instance d'une collection, à chaque appel d'un for
static/shared n'a rien à voir dans ce fonctionnement
et retourner un tableau ou une collection remplie diffère donc du comportement de yield qui fait que la méthode est exécutée en plusieurs fois avec une sortie à chaque yield
après en vb on a un mot clé static mais qui n'a pas le même fonctionnement qu'en c#
le static de c# est le shared en vb
le static en vb s'utilise à la place d'un dim pour dire que la valeur reste d'un appel à un autre
le lien que tu as donné dit
j'aurais donc tendance à croire comme j'avais cru le comprendre à l'époque que yield fait sortir de la méthodeL'expression yield return <expression>; est rencontrée : La valeur de <expression> est affectée à la propriété Current de l'objet énumérateur, et toutes les valeurs des variables locales utilisées par le bloc itérateur sont sauvegardées.
et en plus les variables seraient conservées pour le prochain appel, un peu comme avec du static de vb
et l'article commence par
ce mécanisme n'est pas seulement troublant
Réessayons d'y voir clair dans out cela,
yield est un sucre syntaxique offert pour simplifier l'écriture, c'est ainsi le compilo qui se charge de transformer le code en une machine à états (réalisant ainsi le pattern iterator) et permet ainsi d'obtenir deux choses:
- une exécution différée
- une évaluation paresseuse
Chose que ne fait absolument pas le code VB.Net fourni.
Par conséquent même si dans ce cas les deux méthodes Inc() donnent à terme les mêmes résultats, elles ne sont pas équivalentes ; et il ne s'agit en aucun cas d'une "traduction de yield"
Si les deux étaient équivalents j'aimerais bien voir la traduction en VB.Net (via cette méthode) des deux suivantes (chacun illustrant les 2 points énoncés plus haut)
En effet l'exécution différée permet de ne rien évaluer tant qu'on ne tente pas d'accéder aux éléments et l'évaluation paresseuse n'évalue que ce qui est nécessaire par élément.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 using System; using System.Collections.Generic; using System.Linq; class Program { static void Main () { var test1 = AlwaysThrowing (); // does not throw until enumeration // foreach (int item in test1) ; // uncomment to see Exception here var test2 = ShouldAccesAtLeastFirst (); Console.WriteLine (test2.First ()); // does not throw because only first item is evaluated (Exception is after) } #pragma warning disable 162 // ignore "unreacheable code" warning for illustrating pupose static IEnumerable<int> AlwaysThrowing () { throw new InvalidOperationException ("should not appear if execution is deferred"); yield return 42; } #pragma warning restore 162 static IEnumerable<int> ShouldAccesAtLeastFirst () { yield return 42; throw new InvalidOperationException ("should not appear if evaluated lazily"); } }
Cordialement !
Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
À quelle heure dormez-vous ?
Censément, quelqu'un de sensé est censé s'exprimer sensément.
Bonjour
Je vois que ma question a sucité des débats avec des notions qui me dépassent un peu!
J'ai bien Framework 4 sur mon systeme.
J'ai suivi les conseils de chamamo en téléchageant asunc CTP qui s'est installé sans soucis.
Mais Yield n'est toujours pas reconnu.
Ai-je loupé quelques choses.
Merci pour vos aides.
Bernard
Pour savoir si j'ai compris, voici le code d'origine en C#
que j'ai traduit comme cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public IEnumerable<HtmlNode> Ancestors() { HtmlNode node = ParentNode; while (node.ParentNode != null) { yield return node.ParentNode; node = node.ParentNode; } }
1) Est-ce correct ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public Function Ancestors() As IEnumerable(Of HtmlNode) Dim node As HtmlNode = ParentNode Dim result As New List(Of HtmlNode)() While node.ParentNode IsNot Nothing result.Add(node.ParentNode) node = node.ParentNode End While Return result End Function
2) Quelle est la signification de () à la fin de
Merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim result As New List(Of HtmlNode)()
Bernard
normalement si tout est bien installé ceci devrait fonctionner (je reprends les exemples présents dans le sujet)
Après si ça ne fonctionne pas il faudra donner plus d'informations (code exact, message d'erreur exact et/ou comportement attendu/obtenu etc.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Iterator Function Inc() As IEnumerable(Of Integer) For i = 1 To 10 Yield i Next End Function Iterator Function AlwaysThrowing() As IEnumerable(Of Integer) Throw New InvalidOperationException("should not appear if execution is deferred") Yield 42 End Function Iterator Function ShouldAccessAtLeastFirst() As IEnumerable(Of Integer) Yield 42 Throw New InvalidOperationException("should not appear if evaluated lazily") End Function
Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
À quelle heure dormez-vous ?
Censément, quelqu'un de sensé est censé s'exprimer sensément.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager