[{"data":1,"prerenderedAt":1412},["ShallowReactive",2],{"page-\u002Fcsharp\u002Fcollections-et-exceptions":3,"pieces-csharp":1369,"autour-\u002Fcsharp\u002Fcollections-et-exceptions":1394,"prerequis-\u002Fcsharp\u002Fcollections-et-exceptions":1399,"plan-csharp":1401},{"id":4,"title":5,"body":6,"description":1336,"extension":1337,"ligne":65,"meta":1338,"motsCles":1339,"navigation":124,"niveau":1341,"path":1342,"prerequis":1343,"ressources":1345,"seo":1358,"sources":1359,"stem":1367,"__hash__":1368},"docs\u002Fcsharp\u002F03.collections-et-exceptions.md","Collections et exceptions",{"type":7,"value":8,"toc":1325},"minimark",[9,14,43,47,60,200,207,214,218,225,328,401,405,415,528,535,539,550,638,651,661,729,733,740,774,782,863,875,879,886,994,1013,1019,1094,1107,1111,1118,1241,1258,1262,1321],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,30,40],"ul",{},[18,19,20,21,25,26,29],"li",{},"Garder plusieurs valeurs dans une ",[22,23,24],"code",{},"List"," et les retrouver par clé dans un ",[22,27,28],{},"Dictionary",".",[18,31,32,33,36,37,29],{},"Comprendre ce qu'est une exception et l'attraper avec ",[22,34,35],{},"try"," et ",[22,38,39],{},"catch",[18,41,42],{},"Convertir une saisie sans faire planter le programme.",[10,44,46],{"id":45},"la-liste","La liste",[48,49,50,51,55,56,59],"p",{},"Une recette a plusieurs ingrédients. Une ",[52,53,54],"strong",{},"liste"," (",[22,57,58],{},"List\u003CT>",") garde une série de valeurs du même type, dans l'ordre, et peut grandir.",[61,62,67],"pre",{"className":63,"code":64,"language":65,"meta":66,"style":66},"language-csharp shiki shiki-themes github-light-default github-dark-default github-dark-default","var ingredients = new List\u003Cstring> { \"farine\", \"oeufs\", \"lait\" };\n\ningredients.Add(\"sucre\");\ningredients.Remove(\"lait\");\n\nConsole.WriteLine(ingredients.Count);   \u002F\u002F 3\nConsole.WriteLine(ingredients[0]);      \u002F\u002F farine\n","csharp","",[22,68,69,119,126,145,159,164,180],{"__ignoreMap":66},[70,71,74,78,82,85,88,91,95,98,101,105,108,111,113,116],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sOnC1","var",[70,79,81],{"class":80},"sIXEE"," ingredients",[70,83,84],{"class":76}," =",[70,86,87],{"class":76}," new",[70,89,90],{"class":80}," List",[70,92,94],{"class":93},"scfrF","\u003C",[70,96,97],{"class":76},"string",[70,99,100],{"class":93},"> { ",[70,102,104],{"class":103},"shWOn","\"farine\"",[70,106,107],{"class":93},", ",[70,109,110],{"class":103},"\"oeufs\"",[70,112,107],{"class":93},[70,114,115],{"class":103},"\"lait\"",[70,117,118],{"class":93}," };\n",[70,120,122],{"class":72,"line":121},2,[70,123,125],{"emptyLinePlaceholder":124},true,"\n",[70,127,129,132,136,139,142],{"class":72,"line":128},3,[70,130,131],{"class":93},"ingredients.",[70,133,135],{"class":134},"syCW7","Add",[70,137,138],{"class":93},"(",[70,140,141],{"class":103},"\"sucre\"",[70,143,144],{"class":93},");\n",[70,146,148,150,153,155,157],{"class":72,"line":147},4,[70,149,131],{"class":93},[70,151,152],{"class":134},"Remove",[70,154,138],{"class":93},[70,156,115],{"class":103},[70,158,144],{"class":93},[70,160,162],{"class":72,"line":161},5,[70,163,125],{"emptyLinePlaceholder":124},[70,165,167,170,173,176],{"class":72,"line":166},6,[70,168,169],{"class":93},"Console.",[70,171,172],{"class":134},"WriteLine",[70,174,175],{"class":93},"(ingredients.Count);   ",[70,177,179],{"class":178},"sd6ml","\u002F\u002F 3\n",[70,181,183,185,187,190,194,197],{"class":72,"line":182},7,[70,184,169],{"class":93},[70,186,172],{"class":134},[70,188,189],{"class":93},"(ingredients[",[70,191,193],{"class":192},"s5iOY","0",[70,195,196],{"class":93},"]);      ",[70,198,199],{"class":178},"\u002F\u002F farine\n",[48,201,202,203,206],{},"Le type entre chevrons, ",[22,204,205],{},"\u003Cstring>",", indique ce que la liste contient. On l'appelle le type générique.",[48,208,209,210,213],{},"Les éléments sont numérotés à partir de 0 : le premier est ",[22,211,212],{},"ingredients[0]",". Demander un numéro qui n'existe pas provoque une erreur.",[10,215,217],{"id":216},"parcourir-et-tester-une-liste","Parcourir et tester une liste",[48,219,220,221,224],{},"Tu utilises ",[22,222,223],{},"foreach"," pour parcourir une liste :",[61,226,228],{"className":63,"code":227,"language":65,"meta":66,"style":66},"foreach (string ingredient in ingredients)\n{\n    Console.WriteLine($\"- {ingredient}\");\n}\n\nif (ingredients.Contains(\"sucre\"))\n{\n    Console.WriteLine(\"Il y a du sucre\");\n}\n",[22,229,230,247,252,278,283,287,305,309,323],{"__ignoreMap":66},[70,231,232,234,236,238,241,244],{"class":72,"line":73},[70,233,223],{"class":76},[70,235,55],{"class":93},[70,237,97],{"class":76},[70,239,240],{"class":80}," ingredient",[70,242,243],{"class":76}," in",[70,245,246],{"class":93}," ingredients)\n",[70,248,249],{"class":72,"line":121},[70,250,251],{"class":93},"{\n",[70,253,254,257,259,261,264,267,270,273,276],{"class":72,"line":128},[70,255,256],{"class":93},"    Console.",[70,258,172],{"class":134},[70,260,138],{"class":93},[70,262,263],{"class":103},"$\"- ",[70,265,266],{"class":103},"{",[70,268,269],{"class":93},"ingredient",[70,271,272],{"class":103},"}",[70,274,275],{"class":103},"\"",[70,277,144],{"class":93},[70,279,280],{"class":72,"line":147},[70,281,282],{"class":93},"}\n",[70,284,285],{"class":72,"line":161},[70,286,125],{"emptyLinePlaceholder":124},[70,288,289,292,295,298,300,302],{"class":72,"line":166},[70,290,291],{"class":76},"if",[70,293,294],{"class":93}," (ingredients.",[70,296,297],{"class":134},"Contains",[70,299,138],{"class":93},[70,301,141],{"class":103},[70,303,304],{"class":93},"))\n",[70,306,307],{"class":72,"line":182},[70,308,251],{"class":93},[70,310,312,314,316,318,321],{"class":72,"line":311},8,[70,313,256],{"class":93},[70,315,172],{"class":134},[70,317,138],{"class":93},[70,319,320],{"class":103},"\"Il y a du sucre\"",[70,322,144],{"class":93},[70,324,326],{"class":72,"line":325},9,[70,327,282],{"class":93},[329,330,331,344],"table",{},[332,333,334],"thead",{},[335,336,337,341],"tr",{},[338,339,340],"th",{},"Membre",[338,342,343],{},"Effet",[345,346,347,358,368,378,388],"tbody",{},[335,348,349,355],{},[350,351,352],"td",{},[22,353,354],{},"Add(x)",[350,356,357],{},"Ajoute à la fin",[335,359,360,365],{},[350,361,362],{},[22,363,364],{},"Remove(x)",[350,366,367],{},"Retire la première occurrence",[335,369,370,375],{},[350,371,372],{},[22,373,374],{},"Contains(x)",[350,376,377],{},"Dit si la valeur est présente",[335,379,380,385],{},[350,381,382],{},[22,383,384],{},"Count",[350,386,387],{},"Nombre d'éléments",[335,389,390,395],{},[350,391,392],{},[22,393,394],{},"[i]",[350,396,397,398],{},"Lit l'élément numéro ",[22,399,400],{},"i",[10,402,404],{"id":403},"le-dictionnaire","Le dictionnaire",[48,406,407,408,55,411,414],{},"Un ",[52,409,410],{},"dictionnaire",[22,412,413],{},"Dictionary\u003CTKey, TValue>",") associe une clé à une valeur, comme un carnet où tu retrouves un prix à partir d'un nom.",[61,416,418],{"className":63,"code":417,"language":65,"meta":66,"style":66},"var prix = new Dictionary\u003Cstring, double>\n{\n    [\"Crêpes\"] = 3.5,\n    [\"Gaufres\"] = 4.0\n};\n\nprix[\"Tarte\"] = 5.5;\nConsole.WriteLine(prix[\"Crêpes\"]);   \u002F\u002F 3.5\n",[22,419,420,446,450,470,484,489,493,511],{"__ignoreMap":66},[70,421,422,424,427,429,431,434,436,438,440,443],{"class":72,"line":73},[70,423,77],{"class":76},[70,425,426],{"class":80}," prix",[70,428,84],{"class":76},[70,430,87],{"class":76},[70,432,433],{"class":80}," Dictionary",[70,435,94],{"class":93},[70,437,97],{"class":76},[70,439,107],{"class":93},[70,441,442],{"class":76},"double",[70,444,445],{"class":93},">\n",[70,447,448],{"class":72,"line":121},[70,449,251],{"class":93},[70,451,452,455,458,461,464,467],{"class":72,"line":128},[70,453,454],{"class":93},"    [",[70,456,457],{"class":103},"\"Crêpes\"",[70,459,460],{"class":93},"] ",[70,462,463],{"class":76},"=",[70,465,466],{"class":192}," 3.5",[70,468,469],{"class":93},",\n",[70,471,472,474,477,479,481],{"class":72,"line":147},[70,473,454],{"class":93},[70,475,476],{"class":103},"\"Gaufres\"",[70,478,460],{"class":93},[70,480,463],{"class":76},[70,482,483],{"class":192}," 4.0\n",[70,485,486],{"class":72,"line":161},[70,487,488],{"class":93},"};\n",[70,490,491],{"class":72,"line":166},[70,492,125],{"emptyLinePlaceholder":124},[70,494,495,498,501,503,505,508],{"class":72,"line":182},[70,496,497],{"class":93},"prix[",[70,499,500],{"class":103},"\"Tarte\"",[70,502,460],{"class":93},[70,504,463],{"class":76},[70,506,507],{"class":192}," 5.5",[70,509,510],{"class":93},";\n",[70,512,513,515,517,520,522,525],{"class":72,"line":311},[70,514,169],{"class":93},[70,516,172],{"class":134},[70,518,519],{"class":93},"(prix[",[70,521,457],{"class":103},[70,523,524],{"class":93},"]);   ",[70,526,527],{"class":178},"\u002F\u002F 3.5\n",[48,529,530,531,534],{},"Chaque clé est unique. Écrire ",[22,532,533],{},"prix[\"Tarte\"] = ..."," ajoute l'entrée si elle n'existe pas, ou remplace sa valeur sinon.",[10,536,538],{"id":537},"chercher-sans-risque-avec-trygetvalue","Chercher sans risque avec TryGetValue",[48,540,541,542,545,546,549],{},"Lire ",[22,543,544],{},"prix[\"Pizza\"]"," alors que cette clé n'existe pas provoque une erreur. Pour tester d'abord, utilise ",[22,547,548],{},"TryGetValue"," :",[61,551,553],{"className":63,"code":552,"language":65,"meta":66,"style":66},"if (prix.TryGetValue(\"Pizza\", out double valeur))\n{\n    Console.WriteLine($\"Prix : {valeur}\");\n}\nelse\n{\n    Console.WriteLine(\"Recette inconnue\");\n}\n",[22,554,555,582,586,608,612,617,621,634],{"__ignoreMap":66},[70,556,557,559,562,564,566,569,571,574,577,580],{"class":72,"line":73},[70,558,291],{"class":76},[70,560,561],{"class":93}," (prix.",[70,563,548],{"class":134},[70,565,138],{"class":93},[70,567,568],{"class":103},"\"Pizza\"",[70,570,107],{"class":93},[70,572,573],{"class":76},"out",[70,575,576],{"class":76}," double",[70,578,579],{"class":80}," valeur",[70,581,304],{"class":93},[70,583,584],{"class":72,"line":121},[70,585,251],{"class":93},[70,587,588,590,592,594,597,599,602,604,606],{"class":72,"line":128},[70,589,256],{"class":93},[70,591,172],{"class":134},[70,593,138],{"class":93},[70,595,596],{"class":103},"$\"Prix : ",[70,598,266],{"class":103},[70,600,601],{"class":93},"valeur",[70,603,272],{"class":103},[70,605,275],{"class":103},[70,607,144],{"class":93},[70,609,610],{"class":72,"line":147},[70,611,282],{"class":93},[70,613,614],{"class":72,"line":161},[70,615,616],{"class":76},"else\n",[70,618,619],{"class":72,"line":166},[70,620,251],{"class":93},[70,622,623,625,627,629,632],{"class":72,"line":182},[70,624,256],{"class":93},[70,626,172],{"class":134},[70,628,138],{"class":93},[70,630,631],{"class":103},"\"Recette inconnue\"",[70,633,144],{"class":93},[70,635,636],{"class":72,"line":311},[70,637,282],{"class":93},[48,639,640,641,644,645,647,648,650],{},"La méthode renvoie ",[22,642,643],{},"true"," si la clé existe et, dans ce cas, remplit la variable après ",[22,646,573],{},". Le mot-clé ",[22,649,573],{}," signifie que la méthode renvoie une seconde valeur par ce paramètre.",[48,652,653,654,657,658,549],{},"Pour parcourir un dictionnaire, chaque élément porte une ",[22,655,656],{},"Key"," et une ",[22,659,660],{},"Value",[61,662,664],{"className":63,"code":663,"language":65,"meta":66,"style":66},"foreach (var paire in prix)\n{\n    Console.WriteLine($\"{paire.Key} : {paire.Value}\");\n}\n",[22,665,666,682,686,725],{"__ignoreMap":66},[70,667,668,670,672,674,677,679],{"class":72,"line":73},[70,669,223],{"class":76},[70,671,55],{"class":93},[70,673,77],{"class":76},[70,675,676],{"class":80}," paire",[70,678,243],{"class":76},[70,680,681],{"class":93}," prix)\n",[70,683,684],{"class":72,"line":121},[70,685,251],{"class":93},[70,687,688,690,692,694,697,699,702,704,706,708,711,713,715,717,719,721,723],{"class":72,"line":128},[70,689,256],{"class":93},[70,691,172],{"class":134},[70,693,138],{"class":93},[70,695,696],{"class":103},"$\"",[70,698,266],{"class":103},[70,700,701],{"class":93},"paire",[70,703,29],{"class":103},[70,705,656],{"class":93},[70,707,272],{"class":103},[70,709,710],{"class":103}," : ",[70,712,266],{"class":103},[70,714,701],{"class":93},[70,716,29],{"class":103},[70,718,660],{"class":93},[70,720,272],{"class":103},[70,722,275],{"class":103},[70,724,144],{"class":93},[70,726,727],{"class":72,"line":147},[70,728,282],{"class":93},[10,730,732],{"id":731},"les-exceptions","Les exceptions",[48,734,735,736,739],{},"Parfois, le programme rencontre une situation impossible : une division par zéro, un fichier absent, un texte qui n'est pas un nombre. Il lève alors une ",[52,737,738],{},"exception",", un objet qui décrit l'erreur. Sans traitement, le programme s'arrête.",[61,741,743],{"className":63,"code":742,"language":65,"meta":66,"style":66},"int portions = int.Parse(\"quatre\");   \u002F\u002F lève une FormatException\n",[22,744,745],{"__ignoreMap":66},[70,746,747,750,753,755,758,760,763,765,768,771],{"class":72,"line":73},[70,748,749],{"class":76},"int",[70,751,752],{"class":80}," portions",[70,754,84],{"class":76},[70,756,757],{"class":76}," int",[70,759,29],{"class":93},[70,761,762],{"class":134},"Parse",[70,764,138],{"class":93},[70,766,767],{"class":103},"\"quatre\"",[70,769,770],{"class":93},");   ",[70,772,773],{"class":178},"\u002F\u002F lève une FormatException\n",[48,775,776,777,779,780,549],{},"Pour réagir, entoure le code risqué d'un bloc ",[22,778,35],{}," et récupère l'erreur dans un bloc ",[22,781,39],{},[61,783,785],{"className":63,"code":784,"language":65,"meta":66,"style":66},"try\n{\n    int portions = int.Parse(\"quatre\");\n    Console.WriteLine(portions);\n}\ncatch (FormatException)\n{\n    Console.WriteLine(\"Ce n'est pas un nombre\");\n}\n",[22,786,787,792,796,817,826,830,842,846,859],{"__ignoreMap":66},[70,788,789],{"class":72,"line":73},[70,790,791],{"class":76},"try\n",[70,793,794],{"class":72,"line":121},[70,795,251],{"class":93},[70,797,798,801,803,805,807,809,811,813,815],{"class":72,"line":128},[70,799,800],{"class":76},"    int",[70,802,752],{"class":80},[70,804,84],{"class":76},[70,806,757],{"class":76},[70,808,29],{"class":93},[70,810,762],{"class":134},[70,812,138],{"class":93},[70,814,767],{"class":103},[70,816,144],{"class":93},[70,818,819,821,823],{"class":72,"line":147},[70,820,256],{"class":93},[70,822,172],{"class":134},[70,824,825],{"class":93},"(portions);\n",[70,827,828],{"class":72,"line":161},[70,829,282],{"class":93},[70,831,832,834,836,839],{"class":72,"line":166},[70,833,39],{"class":76},[70,835,55],{"class":93},[70,837,838],{"class":80},"FormatException",[70,840,841],{"class":93},")\n",[70,843,844],{"class":72,"line":182},[70,845,251],{"class":93},[70,847,848,850,852,854,857],{"class":72,"line":311},[70,849,256],{"class":93},[70,851,172],{"class":134},[70,853,138],{"class":93},[70,855,856],{"class":103},"\"Ce n'est pas un nombre\"",[70,858,144],{"class":93},[70,860,861],{"class":72,"line":325},[70,862,282],{"class":93},[48,864,865,866,868,869,871,872,874],{},"Si aucune erreur n'a lieu dans ",[22,867,35],{},", le bloc ",[22,870,39],{}," est ignoré. Sinon, le programme saute directement au ",[22,873,39],{}," correspondant.",[10,876,878],{"id":877},"finally-et-throw","finally et throw",[48,880,881,882,885],{},"Le bloc ",[22,883,884],{},"finally"," s'exécute dans tous les cas, avec ou sans erreur. Il sert à libérer ce qui a été ouvert (un fichier, une connexion).",[61,887,889],{"className":63,"code":888,"language":65,"meta":66,"style":66},"try\n{\n    Console.WriteLine(\"Lecture de la recette\");\n}\ncatch (Exception ex)\n{\n    Console.WriteLine($\"Erreur : {ex.Message}\");\n}\nfinally\n{\n    Console.WriteLine(\"Fin du traitement\");\n}\n",[22,890,891,895,899,912,916,930,934,961,965,970,975,989],{"__ignoreMap":66},[70,892,893],{"class":72,"line":73},[70,894,791],{"class":76},[70,896,897],{"class":72,"line":121},[70,898,251],{"class":93},[70,900,901,903,905,907,910],{"class":72,"line":128},[70,902,256],{"class":93},[70,904,172],{"class":134},[70,906,138],{"class":93},[70,908,909],{"class":103},"\"Lecture de la recette\"",[70,911,144],{"class":93},[70,913,914],{"class":72,"line":147},[70,915,282],{"class":93},[70,917,918,920,922,925,928],{"class":72,"line":161},[70,919,39],{"class":76},[70,921,55],{"class":93},[70,923,924],{"class":80},"Exception",[70,926,927],{"class":80}," ex",[70,929,841],{"class":93},[70,931,932],{"class":72,"line":166},[70,933,251],{"class":93},[70,935,936,938,940,942,945,947,950,952,955,957,959],{"class":72,"line":182},[70,937,256],{"class":93},[70,939,172],{"class":134},[70,941,138],{"class":93},[70,943,944],{"class":103},"$\"Erreur : ",[70,946,266],{"class":103},[70,948,949],{"class":93},"ex",[70,951,29],{"class":103},[70,953,954],{"class":93},"Message",[70,956,272],{"class":103},[70,958,275],{"class":103},[70,960,144],{"class":93},[70,962,963],{"class":72,"line":311},[70,964,282],{"class":93},[70,966,967],{"class":72,"line":325},[70,968,969],{"class":76},"finally\n",[70,971,973],{"class":72,"line":972},10,[70,974,251],{"class":93},[70,976,978,980,982,984,987],{"class":72,"line":977},11,[70,979,256],{"class":93},[70,981,172],{"class":134},[70,983,138],{"class":93},[70,985,986],{"class":103},"\"Fin du traitement\"",[70,988,144],{"class":93},[70,990,992],{"class":72,"line":991},12,[70,993,282],{"class":93},[48,995,996,998,999,1002,1003,1006,1007,1009,1010,1012],{},[22,997,924],{}," est le type de base : ",[22,1000,1001],{},"catch (Exception ex)"," attrape toutes les erreurs, et ",[22,1004,1005],{},"ex.Message"," donne le texte de l'erreur. Mets les ",[22,1008,39],{}," précis avant les ",[22,1011,39],{}," généraux.",[48,1014,1015,1016,549],{},"Tu peux aussi lever toi-même une exception avec ",[22,1017,1018],{},"throw",[61,1020,1022],{"className":63,"code":1021,"language":65,"meta":66,"style":66},"static void VerifierPortions(int portions)\n{\n    if (portions \u003C= 0)\n    {\n        throw new ArgumentException(\"Les portions doivent être positives\");\n    }\n}\n",[22,1023,1024,1043,1047,1063,1068,1085,1090],{"__ignoreMap":66},[70,1025,1026,1029,1032,1035,1037,1039,1041],{"class":72,"line":73},[70,1027,1028],{"class":76},"static",[70,1030,1031],{"class":76}," void",[70,1033,1034],{"class":134}," VerifierPortions",[70,1036,138],{"class":93},[70,1038,749],{"class":76},[70,1040,752],{"class":80},[70,1042,841],{"class":93},[70,1044,1045],{"class":72,"line":121},[70,1046,251],{"class":93},[70,1048,1049,1052,1055,1058,1061],{"class":72,"line":128},[70,1050,1051],{"class":76},"    if",[70,1053,1054],{"class":93}," (portions ",[70,1056,1057],{"class":76},"\u003C=",[70,1059,1060],{"class":192}," 0",[70,1062,841],{"class":93},[70,1064,1065],{"class":72,"line":147},[70,1066,1067],{"class":93},"    {\n",[70,1069,1070,1073,1075,1078,1080,1083],{"class":72,"line":161},[70,1071,1072],{"class":76},"        throw",[70,1074,87],{"class":76},[70,1076,1077],{"class":80}," ArgumentException",[70,1079,138],{"class":93},[70,1081,1082],{"class":103},"\"Les portions doivent être positives\"",[70,1084,144],{"class":93},[70,1086,1087],{"class":72,"line":166},[70,1088,1089],{"class":93},"    }\n",[70,1091,1092],{"class":72,"line":182},[70,1093,282],{"class":93},[1095,1096,1097],"tip",{},[48,1098,1099,1100,1103,1104,1106],{},"Pour relancer l'erreur après l'avoir notée, écris ",[22,1101,1102],{},"throw;"," seul dans le ",[22,1105,39],{},". Tu gardes ainsi les informations d'origine.",[10,1108,1110],{"id":1109},"préférer-tryparse-pour-les-saisies","Préférer TryParse pour les saisies",[48,1112,1113,1114,1117],{},"Une saisie incorrecte est un cas normal, pas une situation exceptionnelle. Pour convertir un texte en nombre, ",[22,1115,1116],{},"int.TryParse"," évite l'exception :",[61,1119,1121],{"className":63,"code":1120,"language":65,"meta":66,"style":66},"Console.WriteLine(\"Combien de portions ?\");\nstring? saisie = Console.ReadLine();\n\nif (int.TryParse(saisie, out int portions))\n{\n    Console.WriteLine($\"Recette pour {portions} personnes\");\n}\nelse\n{\n    Console.WriteLine(\"Merci de saisir un nombre entier\");\n}\n",[22,1122,1123,1136,1157,1161,1185,1189,1212,1216,1220,1224,1237],{"__ignoreMap":66},[70,1124,1125,1127,1129,1131,1134],{"class":72,"line":73},[70,1126,169],{"class":93},[70,1128,172],{"class":134},[70,1130,138],{"class":93},[70,1132,1133],{"class":103},"\"Combien de portions ?\"",[70,1135,144],{"class":93},[70,1137,1138,1140,1143,1146,1148,1151,1154],{"class":72,"line":121},[70,1139,97],{"class":76},[70,1141,1142],{"class":93},"? ",[70,1144,1145],{"class":80},"saisie",[70,1147,84],{"class":76},[70,1149,1150],{"class":93}," Console.",[70,1152,1153],{"class":134},"ReadLine",[70,1155,1156],{"class":93},"();\n",[70,1158,1159],{"class":72,"line":128},[70,1160,125],{"emptyLinePlaceholder":124},[70,1162,1163,1165,1167,1169,1171,1174,1177,1179,1181,1183],{"class":72,"line":147},[70,1164,291],{"class":76},[70,1166,55],{"class":93},[70,1168,749],{"class":76},[70,1170,29],{"class":93},[70,1172,1173],{"class":134},"TryParse",[70,1175,1176],{"class":93},"(saisie, ",[70,1178,573],{"class":76},[70,1180,757],{"class":76},[70,1182,752],{"class":80},[70,1184,304],{"class":93},[70,1186,1187],{"class":72,"line":161},[70,1188,251],{"class":93},[70,1190,1191,1193,1195,1197,1200,1202,1205,1207,1210],{"class":72,"line":166},[70,1192,256],{"class":93},[70,1194,172],{"class":134},[70,1196,138],{"class":93},[70,1198,1199],{"class":103},"$\"Recette pour ",[70,1201,266],{"class":103},[70,1203,1204],{"class":93},"portions",[70,1206,272],{"class":103},[70,1208,1209],{"class":103}," personnes\"",[70,1211,144],{"class":93},[70,1213,1214],{"class":72,"line":182},[70,1215,282],{"class":93},[70,1217,1218],{"class":72,"line":311},[70,1219,616],{"class":76},[70,1221,1222],{"class":72,"line":325},[70,1223,251],{"class":93},[70,1225,1226,1228,1230,1232,1235],{"class":72,"line":972},[70,1227,256],{"class":93},[70,1229,172],{"class":134},[70,1231,138],{"class":93},[70,1233,1234],{"class":103},"\"Merci de saisir un nombre entier\"",[70,1236,144],{"class":93},[70,1238,1239],{"class":72,"line":977},[70,1240,282],{"class":93},[1242,1243,1244],"note",{},[48,1245,1246,1247,36,1249,1251,1252,1254,1255,1257],{},"Réserve ",[22,1248,35],{},[22,1250,39],{}," aux vrais imprévus (fichier manquant, réseau coupé). Pour les cas que tu peux tester avant, un ",[22,1253,291],{}," ou un ",[22,1256,1173],{}," est plus simple et plus clair.",[10,1259,1261],{"id":1260},"à-retenir","À retenir",[15,1263,1264,1281,1289,1295,1309],{},[18,1265,1266,1268,1269,107,1271,107,1273,107,1275,1277,1278,1280],{},[22,1267,58],{}," garde des valeurs dans l'ordre : ",[22,1270,135],{},[22,1272,152],{},[22,1274,297],{},[22,1276,384],{},", et ",[22,1279,394],{}," à partir de 0.",[18,1282,1283,1285,1286,1288],{},[22,1284,413],{}," associe une clé unique à une valeur ; utilise ",[22,1287,548],{}," quand la clé peut manquer.",[18,1290,1291,1292,1294],{},"Une exception décrit une erreur à l'exécution ; sans ",[22,1293,39],{},", le programme s'arrête.",[18,1296,1297,1299,1300,1302,1303,1305,1306,1308],{},[22,1298,35],{}," entoure le code risqué, ",[22,1301,39],{}," traite l'erreur, ",[22,1304,884],{}," s'exécute dans tous les cas, ",[22,1307,1018],{}," lève une erreur.",[18,1310,1311,1312,1314,1315,1318,1319,29],{},"Pour une saisie, ",[22,1313,1116],{}," est préférable à ",[22,1316,1317],{},"int.Parse"," suivi d'un ",[22,1320,39],{},[1322,1323,1324],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":66,"searchDepth":121,"depth":128,"links":1326},[1327,1328,1329,1330,1331,1332,1333,1334,1335],{"id":12,"depth":121,"text":13},{"id":45,"depth":121,"text":46},{"id":216,"depth":121,"text":217},{"id":403,"depth":121,"text":404},{"id":537,"depth":121,"text":538},{"id":731,"depth":121,"text":732},{"id":877,"depth":121,"text":878},{"id":1109,"depth":121,"text":1110},{"id":1260,"depth":121,"text":1261},"Stocker plusieurs valeurs avec List et Dictionary, puis gérer les erreurs d'exécution avec try, catch et finally.","md",{},[24,28,1340,548,738,35,39,884,1018,1116],"collection","debutant","\u002Fcsharp\u002Fcollections-et-exceptions",[1344],"\u002Fcsharp\u002Fconditions-boucles-methodes",[1346,1350,1354],{"nom":1347,"url":1348,"type":1349},"Tutoriels interactifs C# (Microsoft), dont les listes","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Fdotnet\u002Fcsharp\u002Ftour-of-csharp\u002Ftutorials\u002F","exercice",{"nom":1351,"url":1352,"type":1353},"Parcours Microsoft Learn, Débuter avec C#","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Ftraining\u002Fpaths\u002Fget-started-c-sharp-part-1\u002F","cours",{"nom":1355,"url":1356,"type":1357},"Instructions de gestion des exceptions (Microsoft)","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Fdotnet\u002Fcsharp\u002Flanguage-reference\u002Fstatements\u002Fexception-handling-statements","doc",{"title":5,"description":1336},[1360,1363,1365],{"nom":1361,"url":1362},"Dictionary\u003CTKey,TValue> (référence de l'API)","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Fdotnet\u002Fapi\u002Fsystem.collections.generic.dictionary-2",{"nom":1364,"url":1356},"Instructions de gestion des exceptions",{"nom":1366,"url":1348},"Tutoriels interactifs C# (Microsoft)","csharp\u002F03.collections-et-exceptions","VJ15-m9uMBdAgrebeR6-5tSHG10AH37NA4nAshUoaQY",[1370,1374,1377,1378,1382,1386,1390],{"path":1371,"title":1372,"stem":1373},"\u002Fcsharp\u002Fpremier-programme","Premier programme C#","csharp\u002F01.premier-programme",{"path":1344,"title":1375,"stem":1376},"Conditions, boucles et méthodes","csharp\u002F02.conditions-boucles-methodes",{"path":1342,"title":5,"stem":1367},{"path":1379,"title":1380,"stem":1381},"\u002Fcsharp\u002Fclasses-proprietes-records","Classes, propriétés et records","csharp\u002F04.classes-proprietes-records",{"path":1383,"title":1384,"stem":1385},"\u002Fcsharp\u002Fheritage-et-interfaces","Héritage et interfaces","csharp\u002F05.heritage-et-interfaces",{"path":1387,"title":1388,"stem":1389},"\u002Fcsharp\u002Flinq-et-async","LINQ et async\u002Fawait","csharp\u002F06.linq-et-async",{"path":1391,"title":1392,"stem":1393},"\u002Fcsharp","C#","csharp\u002Findex",[1395,1397],{"title":1375,"path":1344,"stem":1376,"description":1396,"children":-1},"Prendre des décisions avec if et switch, répéter avec for, foreach et while, et ranger son code dans des méthodes réutilisables.",{"title":1380,"path":1379,"stem":1381,"description":1398,"children":-1},"Modéliser une recette avec une classe, ses propriétés et son constructeur, puis découvrir les records pour des données simples comparables par valeur.",[1400],{"path":1344,"title":1375,"ligne":65},[1402,1403,1404,1405,1407,1408,1410],{"path":1371,"title":1372,"niveau":1341,"stem":1373},{"path":1344,"title":1375,"niveau":1341,"stem":1376},{"path":1342,"title":5,"niveau":1341,"stem":1367},{"path":1379,"title":1380,"niveau":1406,"stem":1381},"intermediaire",{"path":1383,"title":1384,"niveau":1406,"stem":1385},{"path":1387,"title":1388,"niveau":1409,"stem":1389},"avance",{"path":1391,"title":1392,"niveau":1411,"stem":1393},"memo",1794583457814]