Come determinare se una proprietà è indicizzata?
Scritto da
Giorgio Di Nardo il
mercoledì 12 maggio 2010
•
Linguaggio:
• 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