cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018
-
Modifié par cs_JMO le 6/12/2015 à 18:34
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018
-
7 déc. 2015 à 06:37
Bonsoir le Forum,
Suite à application en cours de développement, ayant remis "Option Strict On",
VB.NET n'apprécie pas la liaison tardive ci-dessous:
Dim listjob = ListOfJob.Where(Function(c) (c.Trame <> String.Empty)).ToList
For Each items In listjob ' Ajout dans la collection ArrayList arrayListMOP.Add(returnLineMOP(customer, lineMOP, CType(items, Object))) Next items
Function returnLineMOP(ByVal customer As String, ByVal lineMOP As String, ByRef items As Object) As String Dim configparameters = listofconfigcustomer.Single(Function(c) c.Name = customer).Parameters
For i As Integer = 0 To configparameters.Count - 1 Select Case configparameters(i) Case "Environnement" : lineMOP += CType(items.Environnement, Object) & New String(","c, 1) Case "Application" : lineMOP += items.Application & New String(","c, 1) End Select Next i Return lineMOP End Function
Erreur sur "CType(items.Environnement, Object)" et "items.Application" -> Option Strict On rejette toute liaison tardive.
Mes erreurs sont très certainement dues à :
- Dim listjob = ListOfJob
- arrayListMOP.Add(returnLineMOP(customer, lineMOP, CType(items, Object)))
- For Each items In
- ByRef items As Object
- CType(items.Environnement, Object)
- items.Application
Merci d'avance pour vos suggestions de correction de typage.
jean-marc
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 6 déc. 2015 à 18:56
Dans items.Environnement, items est un object, et un object n'a pas de méthode Environnement.
Types correctement ton paramètre.
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201826 6 déc. 2015 à 19:02
Bonsoir NHenry,
Avec option Strict Off, items.Environnement me renvoie correctement le .ToString de mon listjob.
Ce sont mes variables précitées que j'ai mal ou pas déclarées.
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 6 déc. 2015 à 23:07
Oui, mais types correctement ta variable avec le type associé, et tu n'aura plus d'erreur.
Tu sais au moins de quel type est ton paramètre ?
Whismeril
Messages postés18416Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 1 juin 2023624 6 déc. 2015 à 23:28
Bonsoir, tout à fait, items est de type Job (enfin, il me semble), du coup comme le dis NHenry, le convertir en object "enlève" l'accès aux champs et méthodes qui n'appartiennent pas à object.
Si tu déclares ta fonction comme ça
Function returnLineMOP(ByVal customer As String, ByVal lineMOP As String, items As Job) As String
sans conversion ni avant, ni après, ça devrait le faire.
En mettant Option Strict Off, VB se dépatouille pour associer un type ou le champ que tu veux existe et retourner un résultat.
Mais imaginons (c'est simpliste) , une classe Humain, qui a entre autres propriétés un AgeMental, Homme qui dérive d'Humain aura aussi cet AgeMental et PetitGarçon qui dérive d'Homme de même.
Quand tu vas convertir une instance de PetitGarçon en object, ce qui est possible puisque object est le père de tous les types en .Net, et par la suite vouloir accéder à l'AgeMental, VB pourra prendre celui d'Humain, ou d'Homme et donc te retourner un mauvais résultat.
Passer Option Strict ON, t'obliges à décrire précisément qui est qui pour éviter ce genre d'erreur.
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201826
>
Whismeril
Messages postés18416Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 1 juin 2023 7 déc. 2015 à 06:37
Bonjour Whismeril,
Merci pour tes explications.
Bonne journée.
6 déc. 2015 à 19:02
Avec option Strict Off, items.Environnement me renvoie correctement le .ToString de mon listjob.
Ce sont mes variables précitées que j'ai mal ou pas déclarées.
6 déc. 2015 à 23:07
Tu sais au moins de quel type est ton paramètre ?
6 déc. 2015 à 23:28
Si tu déclares ta fonction comme ça
sans conversion ni avant, ni après, ça devrait le faire.
En mettant Option Strict Off, VB se dépatouille pour associer un type ou le champ que tu veux existe et retourner un résultat.
Mais imaginons (c'est simpliste) , une classe Humain, qui a entre autres propriétés un AgeMental, Homme qui dérive d'Humain aura aussi cet AgeMental et PetitGarçon qui dérive d'Homme de même.
Quand tu vas convertir une instance de PetitGarçon en object, ce qui est possible puisque object est le père de tous les types en .Net, et par la suite vouloir accéder à l'AgeMental, VB pourra prendre celui d'Humain, ou d'Homme et donc te retourner un mauvais résultat.
Passer Option Strict ON, t'obliges à décrire précisément qui est qui pour éviter ce genre d'erreur.
7 déc. 2015 à 06:37
Merci pour tes explications.
Bonne journée.