2015-08-05 14 views
6

OtrzymujęParametr count niedopasowanie property.GetValue()

count parametr niedopasowanie

błąd. Występuje w klauzuli if. Mój kod:

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; 
} 

To dziwne, bo to działa dobrze, gdy dodaję wartość property do słownika, ale nie kiedy jestem testowania czy to null w klauzuli if.

Wszystkie pytania, które znalazłem, polegały na umieszczeniu nieprawidłowej liczby argumentów w wywołaniu funkcji, ale AFAIK nie ma nic między tymi dwoma połączeniami.

Odpowiedz

12

Jestem prawie pewien, że dzieje się tak dlatego, że typ obiektu ma wartość indexed property, a użytkownik przekazuje wartość zerową do parametru indeksu wywołania GetValue.

Albo usunąć indeksowane właściwość lub odfiltrować właściwości indeksowanych ze swoimi właściwościami zmienną, na przykład:

var properties = obj.GetType().GetProperties() 
        .Where(p => p.GetIndexParameters().Length == 0);