didier Posté(e) le 15 septembre 2016 Posté(e) le 15 septembre 2016 Bonjour à Toutes et à Tous En propos liminaire je préviens que ce n'est pas un souci AutoCAD. Je parle de Visual Studio Community 2015, je n'en suis pas encore à faire des programmes sur AutoCAD car je débute dans ce langage et je veux "comprendre" l'environnement avant de me lancer dans vif du sujet, aussi je fais des exercices avec des choses basiques.Je m'applique les conseils que je donne aux autres et je regarde sur le net mais je ne copie-colle pas, je tape TOUT à la main, certain que c'est la meilleure façon d'apprendre. Le souci :Tout est déclaré en INT, je suis en C# et en application console. Je teste dans un IF et j'ai un souci dont je ne trouve pas la solution tout seul :Dans ce code : if (duree07 = 1) { Console.Write("avant 7 heures:" + duree07 + " heure !\n"); }else { Console.Write("avant 7 heures:" + duree07 + " heures !\n"); } Même si je force la valeur de la variable duree07 à 1 ce cas du IF est toujours ignoré Le mot duree07 est souligné de vaguelettes rouges et une bulle précise : impossible de convertir implicitement le type 'int' en 'bool' Je ne vois pas pourquoi ça coince et j'en appelle à ceux qui savent... Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Olivier Eckmann Posté(e) le 15 septembre 2016 Posté(e) le 15 septembre 2016 Bonsoir, l'opérateur d'égalité en c# c'est == 2 signes égal à la suite. Si tu mets un seul signe = c'est une affectation de valeur à une variable et donc il te dit qu'il ne peut pas convertir la variable entière duree07 qui tu viens de mettre à 1 en type bool requis par le if Olivier
Megeon Posté(e) le 15 septembre 2016 Posté(e) le 15 septembre 2016 Je ne connais pas le C# mais en python j'aurais eu un truc du genre en 'int' et 'str' car ta variable "duree07" est un 'int' et pour écrire tu as besoin d'un 'bool' il te faux donc convertir ta variable en 'bool' il doit exister des outils pour le faire en C# EDIT: ha oui j'avais omis le "if"Et tien l'égalité en C# et en python c'est pareil, idem pour l'affectation de valeur à une variable.
didier Posté(e) le 15 septembre 2016 Auteur Posté(e) le 15 septembre 2016 Coucou Mégeon : merci de ta réponse mais ce n'est pas ça, je parle bien de variables typées en INT Olivier Eckmann : BRAVO, BRAVO, quand je pense que dans les exemples que j'ai trouvé il était précisé de bien faire attention à cette particularité du = et du == et même que le type qui écrivait disait que c'est une erreur couramment commise, je suis tombé dans le panneau à fond la caisse.Un grand merci à Toi. Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Megeon Posté(e) le 15 septembre 2016 Posté(e) le 15 septembre 2016 Didier : Ben cette erreur tu ne la feras plus, c'est déjà ça ! pour les erreur fréquente tu as aussi l'oublie d'une parenthèse (ici les {})
(gile) Posté(e) le 15 septembre 2016 Posté(e) le 15 septembre 2016 À Megeon, Une des différences majeure entre Python et C#, c'est justement le typage des variables Python utilise le typage dynamique et C# le typage statique (sauf si on utilise explicitement le type "dynamic") Python :foo = 1 #foo est du type int (entier) foo = True #foo est maintenant du type bool (booléen) C#int foo = 1; //foo est de type int foo = true; //=> error CS0029: Impossible de convertir implicitement le type 'bool' en 'int' dynamic bar = 1; //bar est de type dynamic à la compilation et sera de type int à l'exécution bar = true; //bar est toujours de type dynamic à la compilation mais sera de type bool à l'exécution À didier, Tout d'abord, je ne peux qu'agréer les choix de méthodologie que tu as fait pour ton apprentissage. La méthode Console.WriteLine() évite d'avoir à ajouter "\n" à la fin de la chaîne.Cette méthode (comme Console.Write()) a un constructeur surchargé (overload) qui permet de passer des arguments de tous types dans une chaîne de caractères :Console.WriteLine("avant 7 heures:{0} heure !", duree07);Avec C# 6 (Visual Studio 2015) on peut même utiliser "l'interpolation de chaînes" :Console.WriteLine($"avant 7 heures:{duree07} heure !"); Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 16 septembre 2016 Auteur Posté(e) le 16 septembre 2016 Coucou Merci (gile), je ne connaissais pas (et merci aussi de confirmer mon choix de formation je pense être dans le vrai). En fait j'ai trouvé empiriquement et comme ça fonctionnait je n'ai pas cherché plus loin, merci de m'avoir redirigé. Par contre j'ai fait deux essais : Avec et sans le caractère dollar après la parenthèse ouvrante sans constater de différences à l’exécution. Et ma question devient : quelle est l'utilité (car il y en a une) de ce dollar ?Et ma question encore plus con, pourquoi on mettrait pas un € en France ? (t'as compris que je blaguais) Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Megeon Posté(e) le 16 septembre 2016 Posté(e) le 16 septembre 2016 A vue de nez, mais attendons confirmation,Dans l'exemple 1 tu as {0} avec l'arguement duree07 a la fin dans le second exemple l'argument est directement entre les {} mais tu as le $ il doit y avoir un rapportce doit être "l'interpolation des chaînes" Apres je suis comme toi j'essaie de comprendre ^^
(gile) Posté(e) le 16 septembre 2016 Posté(e) le 16 septembre 2016 Par contre j'ai fait deux essais : Avec et sans le caractère dollar après la parenthèse ouvrante sans constater de différences à l’exécution. Et ma question devient : quelle est l'utilité (car il y en a une) de ce dollar ?Et ma question encore plus con, pourquoi on mettrait pas un € en France ? (t'as compris que je blaguais) Amicalement Le dollar est une nouveauté de C# 6 qui permet "l'interpolation de chaîne". Ça permet d'écrire de façon plus lisible ce qu'on faisait (et qu'on peut toujours faire) avec String.Format() (et plus particulièrement la surcharge qui accepte un nombre indéterminé d'arguments). Avec String.Format :string.Format("{0}, PI est égal à {1:0.0000}", Environment.UserName, Math.PI)retourne : > "didier, PI est égal à 3.1416" Avec C# 6 et le dollar on peut désormais écrire :$"{Environment.UserName}, PI est égal à {Math.PI:0.0000}" Les méthodes Console.Write() ou Console.WriteLine() utilisent implicitement un mécanisme similaire à String.Format(), mais on peut aussi leur passer la chaîne interpolée avec l'opérateur $.Par contre, si tu ne mets pas le $, ça devrait retourner la chaîne littérale :Console.WriteLine("PI = {Math.PI: 0.00}");affiche : "PI = {Math.PI: 0.00}" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 17 septembre 2016 Auteur Posté(e) le 17 septembre 2016 Coucou J'en ai rêvé cette nuit !!! ça me remet en mémoire le temps où je tapais comme un demeuré (et tout seul dans mon coin) des lignes de code en lisp sur l'edit du DOS.Il y a eu de l'évolution on a un IDE et SURTOUT on peut soumettre son souci à quelqu'un via l'internet. Merci (gile), tes explications clarifient la situation. Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant