Wednesday, March 23, 2011

C# Reflection Indexed Properties

I am writing a Clone method using reflection. How do I detect that a property is an indexed property using reflection? For example:

public string[] Items { get; set; }

My method so far:

    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;
    }
From stackoverflow
  • if (PropertyInfo.GetIndexParameters().Length > 0)
    {
        // Property is an indexer
    }
    
    Jeromy Irvine : lol - beat me to it as I was copying the documentation link.
  • What you want is the GetIndexParameters() method. If the array that it returns has more than 0 items, that means it's an indexed property.

    See the MSDN documentation for more details.

  • Sorry, but

    public string[] Items { get; set; }
    

    is not an indexed property, it's merely of an array type! However the following is:

    public string this[int index]
    {
        get { ... }
        set { ... }
    }
    

0 comments:

Post a Comment