C#: l'Utilisation d'une variable locale non assignée, à l'aide d'un foreach et si
J'ai le code suivant:
Je reçois le message d'erreur, "l'Usage de l'onu Attribué la variable Locale"
Je suis sûr que c'est mort simple, mais je suis perplexe..
public string return_Result(String[,] RssData, int marketId)
{
string result;
foreach (var item in RssData)
{
if (item.ToString() == marketId.ToString())
{
result = item.ToString();
}
else
{
result = "";
}
}
return result;
}
Le problème n'est pas avec la boucle foreach, mais vous avez un problème là...
OriginalL'auteur Anil | 2011-07-03
Vous devez vous connecter pour publier un commentaire.
Initialiser résultat lorsque vous déclarez. Si la collection est vide aucune des branches de l'instruction if ne sera jamais prise et le résultat ne sera jamais attribué avant de la restituer.
item.ToString()
? ce qui serait point? un peu déconcertée.OriginalL'auteur tvanfosson
Si il n'y a pas d'éléments dans
RssData
, puisresult
n'aura jamais été ensemble, et donc invalide.Soit initialiser
result
(par exemple,string result = null;
) ou de considérer que, dans votre conception par la vérification de la vacuité, et le réglage ou le retour d'un état d'échec dans ce scénario.OriginalL'auteur pickypg
C'est parce que le compilateur ne peut pas savoir qu'il y sont toujours tous les éléments de
RssData
. Si il serait vide, le code dans la boucle ne sera jamais exécuté, et la variable ne sera jamais affecté.Viens de mettre la variable à null lors de sa création, de sorte qu'il a toujours une valeur:
String.Empty
ounull
?Cela dépendra de ce que vous souhaitez dans le cas que
RssData
était réellement vide. Autre que cela, je préfèrenull
que c'est juste une littérale valeur zéro, alors queString.Empty
est une référence qui doit être copié à partir de quelque part.OriginalL'auteur Guffa
Si
RssData
a zéro éléments, la boucle ne sera pas exécuté, laissantresult
pas défini. Vous avez besoin de l'initialiser à quelque chose (par exemplestring result = "";
) pour éviter cette erreur.OriginalL'auteur bobbymcr
Changer votre ligne de
À
Le compilateur est juste dire "Hey, vous vous servez de suite et il n'a pas encore été attribué!". Cette même apparaît lors de l'affectation pour la première fois, si vous n'êtes pas le faire dans la première instanciation.
Vous permettra également d'envisager la façon dont vous avez besoin pour gérer votre code si vous retourne une chaîne vide, en raison de votre tableau argument étant passé dans le vide. Vous pouvez choisir de renvoyer une chaîne vide, ou une valeur null. C'est juste un behaviorial décision.
OriginalL'auteur David Anderson
Cela peut se produire pour tous les types de variables.
Pour les collections et les objets, initialiser à l'aide de nouveau.
par exemple.
List<string> result = new List<string>();
OriginalL'auteur John Rice