Modifica valori attributi delle proprietà di una classe

mercoledì 17 agosto 2011 - 17.22
Tag Elenco Tags  C#  |  .NET 2.0  |  Windows Server 2003  |  Visual Studio 2008  |  MySQL 5.1  |  Internet explorer 8.0

simonep Profilo | Newbie

Salve a tutti,
avrei un problemino...

utilizzo gli attributi sulle proprietà di una mia classe, che mi aiutano a identificarle meglio attraverso la reflection...

es.
short? _tipoCliente;
[ProprietaInTabella("Tipologia Cliente")]
public short? TipoCliente
{
get { return _tipoCliente; }
set { _tipoCliente = value; }
}

codice dell'attributo utilizzato:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
public class ProprietaInTabella : Attribute
{
string _alias;

public string Alias
{
get { return _alias; }
set { _alias = value; }
}
string _operatoreSQL;

public string OperatoreSQL
{
get { return _operatoreSQL; }
set { _operatoreSQL = value; }
}

public ProprietaInTabella()
{
}
public ProprietaInTabella(string _alias)
{
this._alias = _alias;
}

}


A questo punto, riesco tranquillamente a leggere il contenuto di questi attributi a run time:
esempio:
Type t1 = miaclasse.getType();
PropertyInfo pInfo = t1.GetProperty(TipoCliente);

object[] attributi = pInfo.GetCustomAttributes(true);
IEnumerator attributiEnum = attributi.GetEnumerator();

while (attributiEnum.MoveNext())
{
switch (attributiEnum.Current.GetType().Name)
{
case ProprietaInTabella:
string alias = ((ProprietaInTabella)attributiEnum.Current).Alias;

[...................]


e sin qui tutto bene....

ora però vorrei, sempre a run time, popolare il valore dell'attributo "operatoreSql"...
ho provato in tanti modi, banalmente tipo:
((ProprietaInTabella)attributiEnum.Current).OperatoreSql = "like";

oppure:
Type t1 = miaclasse.getType();
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(t1)[TipoCliente];
ProprietaInTabella attrib = (ProprietaInTabella)descriptor.Attributes[typeof(ProprietaInTabella)];
FieldInfo FI = attrib.GetType().GetField("_operatoreSQL", BindingFlags.NonPublic | BindingFlags.Instance);
FI.SetValue(attrib, "like");

ma sempre senza successo...... :(

qualcuno ha mai avuto un caso di questo tipo?!?

Grazie mille per il vostro aiuto!!!

Simone
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5