Aller au contenu

[Résolu] souci dans C#


didier

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

À 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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 rapport

ce doit être "l'interpolation des chaînes"

 

Apres je suis comme toi j'essaie de comprendre ^^

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité