32

I'm getting the

parameter count mismatch

error. It occurs at the if clause. My code:

private Dictionary<string,string> ObjectToDict(Dictionary<string, string> dict, object obj)
{
    var properties = obj.GetType().GetProperties();
    foreach (var property in properties)
    {
        if (property.GetValue(obj, null) != null)
            dict["{{" + property.Name + "}}"] = property.GetValue(obj, null).ToString();
    }
    return dict;
}

It's strange because it works just fine when I add the property value to the dictionary, but not when I'm testing if it's null in the if clause.

All the questions I've found were putting an incorrect number of arguments into the function call, but AFAIK there's nothing different between my two calls.

Firkamon
  • 807
  • 1
  • 9
  • 19

1 Answers1

62

I'm pretty sure this is because your object type has an indexer "property" and you are passing null to the index parameter on the GetValue call.

Either remove the indexed property or filter out the indexed properties from your properties variable, for example:

var properties = obj.GetType().GetProperties()
                    .Where(p => p.GetIndexParameters().Length == 0);
alelom
  • 2,130
  • 3
  • 26
  • 38
thepirat000
  • 12,362
  • 4
  • 46
  • 72