J'ai le code suivant utilisant la classe et le dictionnaire qui prennent l'état et la majuscule, mais je ne peux pas récupérer les valeurs en boucle. J'ai besoin d'aide pour éliminer l'erreur qui se produit dans la boucle foreach .
var theState= State.GetStates();
// this prints one item in a dictionary
Console.WriteLine("State Capital of California is " + theState["California"].Capital);
foreach (KeyValuePair<string,object> entry in theState)
{
Console.WriteLine(entry.Key + " State Capital is " + entry.Value.ToString());
}
et mon programme principal est le suivant .. Mais j'obtiens une erreur ..
public class State {
public string Capital { get; set; }
public int Population { get; set; }
public int Size { get; set; }
public State(string aCapital, int aPopulation, int aSize) {
Capital = aCapital;
Population = aPopulation;
Size = aSize;
} // Constructor of the class State
public static Dictionary<string, State> GetStates() {
Dictionary<string, State> myStates = new Dictionary<string, State>(); // need the () because its a class
// myStates takes 2 values, one is a string , that is a state and State , which is inturn takes 3 values -
// Capital,Population, size
State addStateCapital = new State("Montgomery", 214141, 244);
myStates.Add("Alabama", addStateCapital);
// second set
addStateCapital = new State("Sacramento", 214141, 244);
myStates.Add("California", addStateCapital);
return myStates;
}
}
ERREUR sur foreach :
Impossible de convertir keyvaluePairen System ... Generic KVP
Besoin d'aide pour comprendre comment récupérer correctement les valeurs.
3 Réponses :
1) Utilisez State au lieu de Object dans KeyValuePair . Puisque vous avez déjà spécifié dans State.GetStates () le type de retour a
foreach (KeyValuePair<string,State> entry in theState)
{
Console.WriteLine(entry.Key + " State Capital is " + entry.Value.Capital);
}
2) Modifiez également entry.Value.ToString () en entry.Value.Capital strong >. Puisqu'il n'affichera pas le nom de l'état mais le nom de l'objet de classe. Par conséquent, changez-le entry.Value.Capital
Dictionary<string, State>
@VajraAyudha me fait savoir comment cela se passe pour vous.
Votre méthode GetStates () renvoie Dictionary , donc dans cette ligne
foreach (KeyValuePair<string, State> entry in theState)
{
Console.WriteLine(entry.Key + " State Capital is " + entry.Value.Capital);
}
la variable theState est affecté au type Dictionary . Mais dans le bloc foreach suivant, vous essayez d'accéder aux valeurs du dictionnaire en tant que KeyValuePair .
Vous devez donc l'utiliser comme ceci:
var theState= State.GetStates();
Changer l'extrait de code ci-dessous résoudra votre problème
foreach (KeyValuePair<string, State> entry in theState)
{
Console.WriteLine(entry.Key + " State Capital is " + entry.Value.Capital);
}
Mais pour comprendre pourquoi vous obtenez cette erreur, vous voudrez peut-être examiner de plus près la définition de Dictionary qui est dérivé de IEnumerable . Ainsi, lorsque vous utilisez la boucle foreach, elle agit en interne sur IEnumerable . Ici, le compilateur s'attend à ce que chaque entité de foreach soit de type KeyValuePair . Maintenant que dans le dictionnaire, vous avez TValue est de type State qui explique pourquoi le compilateur attend KeyValuePair . Maintenant, pour avoir une compréhension approfondie à ce sujet, vous voudrez peut-être passer par les "concepts covariants et contravariants c #"
Il vous indique l'erreur dans le message d'erreur; vous essayez de convertir un
KeyValuePair en unKeyValuePair . Je suggère d'utiliser simplementforeach (var entry in theState).