PropertyInfo.setValue ArgumentException?

#c# #reflection

#c# #отражение

Вопрос:

У меня есть следующий код. Однако у него включено исключение во время выполнения SetValue . Что может вызвать ошибку?

 var _filter = new Filter(....); // Filter implemented IFilter
ApplyFilter(_view.Name, x => x.Name); 

private void ApplyFilter<T>(T curr, Expression<Func<IFilter, T>> prev) 
{
    var expr = (MemberExpression)prev.Body;
    var prop = (PropertyInfo)expr.Member;
    if (!EqualityComparer<T>.Default.Equals(curr, (T)_filter[prop.Name]))
    {
        prop.SetValue(_filter, curr, null); // Error
        ..... // do something on _filter
  

Исключением является:

Система.Исключение ArgumentException не было обработано
 Сообщение = метод набора свойств не найден.
 Источник= mscorlib
 Отслеживание стека:
 в системе.Размышления.RuntimePropertyInfo.setValue(объект obj, значение объекта, BindingFlags invokeAttr, связующий связующий, индекс объекта [], культура культуры)
 в системе.Размышления.RuntimePropertyInfo.setValue(объект obj, значение объекта, индекс объекта[])
 в MyApp.ErrorLogPresenter.applyFilter[T](T curr, выражение `1 предыдущее) в d:....cs:line 50

Комментарии:

1. Пожалуйста, опубликуйте исключение тоже.

2. игнорирование индекса в свойстве индексации [] или попытка установить свойство, у которого есть только получатель…

3. «Метод набора свойств не найден». — звучит довольно ясно для меня; есть ли у этого свойства установщик? Можем ли мы увидеть свойство, о котором идет речь?

4. @AK_ Строка вызывает исключение, не использует индексатор?

5. @MarcGravell большое спасибо. Я забыл, что интерфейс не определяет установщик.

Ответ №1:

 Message=Property set method not found.
  

Обычно это просто означает, что используемое вами свойство не определяет установщик. Либо убедитесь, что существует подходящий установщик, либо используйте другой подход для присвоения значений.