J'essaie de sortir les statistiques d'un joueur dans un tableau. Tous les joueurs n'auront pas de statistiques en fonction du jour. J'ai essayé d'autres moyens et tous se plaignent encore. Voici le code que j'ai maintenant:
<tbody>
@foreach(var player in @ViewBag.Roster){
int index = 0;
<tr>
<td>@player.Name, @player.TeamName @player.Position</td>
if(@ViewBag.Stats[index] == null){
<td>--</td>
<td>--</td>
<td>--</td>
<td>--</td>
}
else{
<td>@ViewBag.Stats[index].Points</td>
<td>@ViewBag.Stats[index].Rebounds</td>
<td>@ViewBag.Stats[index].Assists</td>
<td>@ViewBag.Stats[index].Turnovers</td>
}
</tr>
index++;
}
</tbody>
Détails des exceptions: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: impossible d'exécuter une liaison d'exécution sur une référence null
Erreur de source:
Ligne 32:}
Ligne 33: else {
Ligne 34: @ ViewBag.Stats [index] .Points
Ligne 35: @ ViewBag.Stats [index] .Rebounds
Ligne 36: @ ViewBag.Stats [index] .Assists
OK je poste la réponse complète ici -
Essayez @
avant if(@ViewBag.Stats[index] == null){
et supprimez @
de @ViewBag
dans la if
de façon à ce qu'il ressemble à ceci - @if(ViewBag.Stats[index] == null){
Vous définissez index = 0
, dans foreach
, il est donc initialisé à chaque boucle. Initialisez-le en dehors de foreach
comme ceci
var index = 0;
foreach ...
si vous faites face à un problème de portée, essayez ceci -
@{
var index = 0;
foreach (....) {
.......
index++
}
}
si vous voulez garder une trace de l'index, pourquoi ne pas réécrire votre boucle en tant que:
var obj = new string[] { "", "", "" };
for(var index = 0; index < obj.Length; index++)
{
var item = obj[index];
/* DO STUFF WITH ITEM */
}
foreach(var item in obj.Select((value, index) => new { index, value }))
{
/* DO STUFF WITH item.Value */
}