Obtenir les attributs personnalisés à partir d'un objet
Lorsque j'essaie d'obtenir les attributs personnalisés à partir d'un object
la fonction renvoie null
. Pourquoi?
class Person
{
[ColumnName("first_name")]
string FirstName { get; set; }
Person()
{
FirstName = "not important";
var attrs = AttributeReader.Read(FirstName);
}
}
static class AttributeReader
{
static object[] Read(object column)
{
return column.GetType().GetCustomAttributes(typeof(ColumnNameAttribute), false);
}
}
avez-vous essayez de faire Prenom public?
Le code n'est qu'un exemple générique de ce que je suis en train de faire.
Ne pas vous dire d'appeler
Le code n'est qu'un exemple générique de ce que je suis en train de faire.
Ne pas vous dire d'appeler
var attrs = AttributeReader.Read(Person);
, pas var attrs = AttributeReader.Read(FirstName);
?OriginalL'auteur mooper | 2012-06-04
Vous devez vous connecter pour publier un commentaire.
Vous êtes de passage à un
string
,"not important"
à cette méthode. LeType
est donctypeof(string)
. Qui ne dispose pas de ces attributs. De plus, mêmePerson
n'ont pas d'attribut: seul leMemberInfo
(FirstName
).Il y a des façons de le faire que par le passage d'un
Expression
:avec
Cependant! Je dois vous informer que je ne suis pas sûr que le
Person
constructeur est un endroit approprié pour cela. Probablement les besoins de la mise en cache.Si vous ne voulez pas utiliser les lambdas, puis le passage d'un
Type
et les etats-nom serait trop de travail, c'est à dire(et de la réflexion à partir de là) ou de mélange avec les génériques (sans raison valable):
ma mise en garde s'applique toujours: personnellement, je ne la laisserais pas que le code est n'importe où près de un constructeur d'objet - c'est le mauvais endroit pour cela.
Ouais, j'essayais juste de montrer ce que j'essayais de faire, tout en rendant le code plus clair possible
Comment puis-je vérifier si un attribut est obligatoire ou pas? Je suis entrain de créer une instance d'une classe comme
object obj = Activator.CreateInstance("myModel")
et j'ai besoin de vérifier si une propriété particulière est nécessaire ou non:obj.GetType().GetProperty("prop1").......
.OriginalL'auteur Marc Gravell