【问题标题】:PropertyInfo.SetValue ArgumentException?PropertyInfo.SetValue ArgumentException?
【发布时间】:2014-06-24 00:44:32
【问题描述】:

我有以下代码。但是,它在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

例外是:

System.ArgumentException 未处理 消息=未找到属性设置方法。 源=mscorlib 堆栈跟踪: 在 System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,对象值,BindingFlags invokeAttr,活页夹活页夹,对象 [] 索引,CultureInfo 文化) 在 System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,对象值,对象 [] 索引) 在 MyApp.ErrorLogPresenter.ApplyFilter[T](T curr, Expression`1 prev) in d:\..cs:line 50

【问题讨论】:

  • 请也发布异常。
  • 忽略索引属性 [] 上的索引或尝试设置只有 getter 的属性...
  • "找不到属性集方法。" - 对我来说听起来很清楚;这个属性有setter吗?我们能看到有问题的房产吗?
  • @AK_ 行引发异常不使用索引器?
  • @MarcGravell 非常感谢。我忘了接口没有定义setter。

标签: c# reflection


【解决方案1】:
Message=Property set method not found.

这通常意味着您使用的属性没有定义setter。要么确保存在合适的 setter,要么使用不同的方法来分配值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多