public class Foo
{
public string Bar {get; set;}
}
How do I get the value of Bar, a string property, via reflection? The following code will throw an exception if the PropertyInfo type is a System.String
Foo f = new Foo();
f.Bar = "Jon Skeet is god.";
foreach(var property in f.GetType().GetProperties())
{
object o = property.GetValue(f,null); //throws exception TargetParameterCountException for String type
}
It seems that my problem is that the property is an indexer type, with a System.String.
Also, how do I tell if the property is an indexer?
I couldn't reproduce the issue. Are you sure you're not trying to do this on some object with indexer properties? In that case the error you're experiencing would be thrown while processing the Item property. Also, you could do this:
You can just get the property by name:
Regarding the follow up question: Indexers will always be named Item and have arguments on the getter. So
And here is for the followup: