Come determinare se una proprietà è indicizzata?

Scritto da  Giorgio Di Nardo il mercoledì 12 maggio 2010  •  Linguaggio: C#,VB   • Livello: 100


Nei casi in cui sia necessario determinare se una proprietà di una classe sia indicizzata è possibile utilizzare il metodo astratto GetIndexParameters() della classe PropertyInfo definita nel namespace System.Reflection.

Tale metodo, quando implementato nelle classi che derivano da PropertyInfo, restituisce un array di tutti i parametri di indice della proprietà. Se tale array è vuoto la proprietà non è indicizzata, in caso contrario è possibile esaminare gli oggetti di classe ParameterInfo contenuti nell'array per ricavarne informazioni sul numero e sul tipo dei parametri.

C#

class Program
{
static void Main(string[] args)
{
Type type = typeof(MiaClasse);
PropertyInfo propertyInfo;
ParameterInfo[] parametersInfo;

propertyInfo = type.GetProperty("NonIndicizzata");
parametersInfo = propertyInfo.GetIndexParameters();
Console.WriteLine("{0}.{1} ha {2} parametri.", type.Name, propertyInfo.Name, parametersInfo.Length);
foreach (ParameterInfo parameterInfo in parametersInfo)
Console.WriteLine(" {0}. {1} di tipo {2}", parameterInfo.Position, parameterInfo.Name, parameterInfo.ParameterType.Name);

propertyInfo = type.GetProperty("Item");
parametersInfo = propertyInfo.GetIndexParameters();
Console.WriteLine("{0}.{1} ha {2} parametri.", type.Name, propertyInfo.Name, parametersInfo.Length);
foreach (ParameterInfo parameterInfo in parametersInfo)
Console.WriteLine(" {0}. {1} di tipo {2}", parameterInfo.Position, parameterInfo.Name, parameterInfo.ParameterType.Name);

Console.Read();
}
}

class MiaClasse
{
public string NonIndicizzata { get; set; }

private List<string> _indicizzata = new List<string>();
public string this[int index]
{
get { return _indicizzata[index]; }
set { _indicizzata[index] = value; }
}
}


Tags: Reflection

 
x