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() {Name = "spong", NumberOfHams = 8};
foreach (PropertyInfo propertyInfo in stringy.GetType().GetProperties())
{
if (propertyInfo.CanRead) output += propertyInfo.GetValue(stringy, null);
}
If I run this code for the int
, or for the Foo
complex type, it works fine. But if I run it for the string
(as shown), I get the following error on the line inside the foreach
loop:
System.Reflection.TargetParameterCountException: Parameter count mismatch.
Does anyone know what this means and how to avoid it?
In case anyone asks 'why are you enumerating through the properties of a string', eventually I hope to create a generic class which will output the properties of any type passed to it (which might be a string...).
Just as reference... if you want to avoid the TargetParameterCountException when reading properties values:
Hope it helps ;-)
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 thePropertyInfo
object. It returns an array ofParameterInfo
, but you can just check the length of that array (if there are no parameters, it will be zero)System.String
has an indexed property that returns thechar
in the specified location. An indexed property needs an argument (index in this case) therefore the exception.