TargetParameterCountException when enumerating through properties of string

前端 未结 3 1445
梦如初夏
梦如初夏 2021-02-07 09:01

I\'m using the following code to output values of properties:

string output = String.Empty;
string stringy = \"stringy\";
int inty = 4;
Foo spong = new Foo() {Na         


        
相关标签:
3条回答
  • 2021-02-07 09:35

    In this case, one of the string's properties is the indexer for returning the character at the specified location. Thus, when you try to GetValue, the method expects an index but doesn't receive one, causing the exception.

    To check which properties require index you can call GetIndexParameters on the PropertyInfo object. It returns an array of ParameterInfo, but you can just check the length of that array (if there are no parameters, it will be zero)

    0 讨论(0)
  • 2021-02-07 09:37

    Just as reference... if you want to avoid the TargetParameterCountException when reading properties values:

    // Ask each childs to notify also, if any could (if possible)
    foreach (PropertyInfo prop in options.GetType().GetProperties())
    {
        if (prop.CanRead) // Does the property has a "Get" accessor
        {
            if (prop.GetIndexParameters().Length == 0) // Ensure that the property does not requires any parameter
            {
                var notify = prop.GetValue(options) as INotifyPropertyChanged; 
                if (notify != null)
                {
                    notify.PropertyChanged += options.OptionsBasePropertyChanged;
                }
            }
            else
            {
                // Will get TargetParameterCountException if query:
                // var notify = prop.GetValue(options) as INotifyPropertyChanged;
            }
        }
    }
    

    Hope it helps ;-)

    0 讨论(0)
  • 2021-02-07 09:45

    System.String has an indexed property that returns the char in the specified location. An indexed property needs an argument (index in this case) therefore the exception.

    0 讨论(0)
提交回复
热议问题