2010-02-11 4 views

Répondre

3

utilisant la réflexion, vous pouvez créer un dictionnaire en examinant toutes les propriétés

var result = new Dictionary<string, object>(); 
var type = typeof (System.Windows.SystemParameters); 
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Static); 

foreach(var property in properties) 
{ 
    result.Add(property.Name, property.GetValue(null, null)); 
} 

foreach(var pair in result) 
{ 
    Console.WriteLine("{0} : {1}", pair.Key, pair.Value); 
} 

Cela produira la sortie suivante .. .

FocusBorderWidth: 1
FocusBorderHeight: 1
HighContrast: Faux
FocusBorderWidthKey: FocusBorderWidth
FocusBorderHeightKey: FocusBorderHeight
HighContrastKey: HighContrast
DropShadow: True
FlatMenu: True
WorkArea: 0,0,1681,1021
DropShadowKey: DropShadow
FlatMenuKey: FlatMenu

+0

Réponse parfaite: extrait de code et sortie. Merci! – Lernkurve

-1

Un dictionnaire contient un KeyValuePair donc quelque chose comme cela devrait fonctionner

foreach (KeyValuePair kvp in System.Windows.SystemParameters) 
{ 
    var myvalue = kvp.value; 
} 

Après avoir dit que l'aide ne msdn mentionne rien au sujet System.Windows.SystemParameters être un dictionnaire

+0

. ..mais, SystemParameters n'est pas un dictionnaire, donc cela ne fonctionnera pas. –

4

Malheureusement, SystemParameters doesn N'implémentez aucun type d'interface Enumerable, donc aucun des idiomes de codage d'itération standard en C# ne fonctionnera comme ça.

Cependant, vous pouvez utiliser Réflexion pour obtenir toutes les propriétés statiques publiques de la classe:

var props = typeof(SystemParameters) 
    .GetProperties(BindingFlags.Public | BindingFlags.Static); 

Vous pouvez ensuite itérer sur props.

+0

Merci pour l'indice sur SystemParameters ne mettant en œuvre aucune sorte d'interface Enumerable! – Lernkurve

1

Peut être meilleur moyen de parcourir ensemble réfléchie proprties utilisant Type.GetProperties

Questions connexes