TargetException: объект не соответствует типу цели

Я получаю эту странную ошибку, когда я пытаюсь этот код:

class SomeClass
{
    public decimal ClientCode { get; set; }
    public DateTime Date { get; set; }

    public override int GetHashCode()
    {
        int sum = 0;
        foreach (var p in GetType().GetProperties())
        {
            var method = p.GetType().GetMethod("GetHashCode");
            var value = p.GetValue(this, null);
            sum += (int)(method.Invoke(value, null)); //  <-- HERE!
        }

        return sum;
    }
}

Что в этом плохого? Я перебираю свойства, потому что этот код будет выпущен.

1 ответ

Решение

Я должен получить GetHashCode из объекта, а не из PropertyType

public class SomeClass
{
    public decimal ClientCode { get; set; }
    public DateTime Date { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public byte B { get; set; }

    public override int GetHashCode()
    {
        int sum = 0;
        foreach (var p in GetType().GetProperties())
        {
            var method = typeof(object).GetMethod("GetHashCode");
            var value = p.GetValue(this, null);
            if (value != null)
                sum += (int)(method.Invoke(value, null));
        }

        return sum;
    }
}
Другие вопросы по тегам