Je veux obtenir tous les champs qui ont des valeurs nulles, mais je ne reçois même aucun champ: et j'ai une classe: p> mais quand je vient à p> alors je reçois 0 champs, il devrait trouver 2 champs. p> est Type.getType (). Getfields () mal à utiliser? Ou suis-je envoyé dans la mauvaise classe à la classe de base? p> p>
3 Réponses :
(en utilisant le value1 code> et
value2 code> dans vos paramètres code> Les classes sont des propriétés plutôt que des champs, vous devez donc utiliser
getProperties () code> pour y accéder. p>
{get; set;} code> Syntaxe indique au compilateur que vous souhaitez une propriété, mais qu'il devrait générer le
obtenir code> et
définir code> pour vous, ainsi qu'un champ privé caché contenant les données.) p>
Type.getfields méthodes renvoie tous les champs publics. Les champs que le compilateur autogenerate pour vous êtes privé, vous devez donc spécifier correctement BindingFlags CODE>.
type.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
Les champs générés par le compilateur correspondant aux propriétés de votre classe ont le compilergénera attribut. De plus, le compilateur générera de compilergenerateaTribute strong> documentation MSDN : P> distingue un élément généré par le compilateur d'un élément généré par l'utilisateur. Cette classe ne peut pas être héritée. P>
blockQquote> Le nom de ces champs a le format Par exemple, votre classe obtenir code> et
définir les méthodes de gestion de ces champs, en fonction de la déclaration de votre propriété.
définissez code> et
obtenez code> Les noms ont le format
SET_PROPERTYNAME CODE> et
GET_PROPERTYNAME CODE> Lorsque la propriétéName est le nom de la propriété. p>
Paramètres code> est compilé comme suit: P>
public IEnumerable<FieldInfo> GetFields(Type type)
{
return type
.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Where(f => f.GetCustomAttribute<CompilerGeneratedAttribute>() == null);
}