Je tente actuellement d'écrire une méthode de décharge () de Linqpad équivalent IIN C # pour mon propre amusement. Je bouge de Java en C # et c'est un exercice plutôt qu'une entreprise. J'ai presque tout ce qui fonctionne, sauf pour dumping un dictionnaire.
Le problème est que KeyvaluePair est un type de valeur. Pour la plupart des autres types de valeur, je appelle simplement la méthode de totring, mais cela est insuffisant car le keyValuePairpair peut contenir des énumérables et d'autres objets avec des méthodes de totrage indésirables. Donc, j'ai besoin de travailler si c'est un keyvaluepair puis je le jette. En Java, je pourrais utiliser des génériques Wildcard pour cela, mais je ne connais pas l'équivalent en C #. P>
Votre quête, étant donné un objet O, déterminer s'il s'agit d'un keyValuePair et d'appeler l'impression sur sa clé et sa valeur. < / p> merci! p> p>
3 Réponses :
vous avez le mot clé est http://msdn.microsoft.com/es-es-es /Library/scekt9xw(vs.80).aspx P>
Je pense que cela est problématique avec les génériques. Depuis KeyValuePair
Si vous ne connaissez pas les types stockés dans le Regardons ce qui est nécessaire: P> Premier , assurons que la valeur n'est pas KeyValuePair CODE> Vous devez faire de l'exercice d'un peu de code de réflexion. null code>: p> object kvpKey = valueType.GetProperty("Key").GetValue(value, null);
object kvpValue = valueType.GetProperty("Value").GetValue(value, null);
J'étais sur le point de suggérer exactement ça .. :) bonne réponse
Sur .NET 4.7 et .NET CORE Le BaseType code> renvoie System.valueType code>
présumer que vous utilisez le générique KeyValuePairPair, vous devez probablement vouloir vérifier une instanciation particulière, telle que celle créée à l'aide d'une chaîne pour la clé et la valeur:
public void Print(object o)
{
if (o == null)
return;
if (o is KeyValuePair<string, string>)
{
KeyValuePair<string, string> pair = (KeyValuePair<string, string>)o;
Console.WriteLine("{0} = {1}", pair.Key, pair.Value);
}
}