C# Réflexion Indexé Propriétés
Je suis en train d'écrire une méthode Clone à l'aide de la réflexion. Comment puis-je détecter qu'une propriété est une propriété indexée à l'aide de la réflexion? Par exemple:
public string[] Items
{
get;
set;
}
Ma méthode de mesure:
public static T Clone<T>(T from, List<string> propertiesToIgnore) where T : new()
{
T to = new T();
Type myType = from.GetType();
PropertyInfo[] myProperties = myType.GetProperties();
for (int i = 0; i < myProperties.Length; i++)
{
if (myProperties[i].CanWrite && !propertiesToIgnore.Contains(myProperties[i].Name))
{
myProperties[i].SetValue(to,myProperties[i].GetValue(from,null),null);
}
}
return to;
}
- Ce n'est pas une propriété indexée, qui est une propriété qui retourne un tableau.
- Cette question doit être modifié par un modérateur. Il est à la tête des résultats sur google pour trouver un indexeur de propriété, mais ce n'est pas ce que l'exemple de code illustre. La moitié des réponses ci-dessous la réponse à la question et la moitié de l'exemple de code.
Vous devez vous connecter pour publier un commentaire.
Désolé, mais
est pas une propriété indexée, il s'agit simplement d'un type de tableau!
Cependant la suivante:
Ce que vous voulez, c'est le
GetIndexParameters()
méthode. Si le tableau qu'il retourne a plus que 0 articles, cela signifie que c'est une propriété indexée.Voir la documentation MSDN pour plus de détails.
Si vous appelez
property.GetValue(obj,null)
, et la propriété EST indexé, alors vous obtiendrez un nombre de paramètre exception d'incompatibilité. Préférable de vérifier si la propriété est indexé à l'aide deGetIndexParameters()
et ensuite décider quoi faire.Voici un code qui a fonctionné pour moi:
P. S.
.GetIndexParameters().Length > 0)
travaille pour le cas décrit dans cet article: http://msdn.microsoft.com/en-us/library/b05d59ty.aspxDonc, si vous vous souciez de la propriété nommée Caractères pour une valeur de type chaîne de caractères, utilisez-le, mais il ne fonctionne pas pour la plupart des tableaux, j'ai été intéressé, y compris, je suis assez sûr, un tableau de chaîne à partir de la question d'origine.
Vous pouvez convertir l'indexeur de IEnumerable
String
le type d'entrée. Il est accroché sur leChars
propriété indexée. Sauf que je suis absent quelque chose de moi-même...