使用Action时出错(T,对象)

时间:2017-10-25 08:54:10

标签: c# argumentexception

我正在调试别人的源代码,我不确定它是如何工作的,所以有点卡住了。

此代码:

List<string> source = new List<string>();
for (int ordinal = 0; ordinal < dbDataReader.FieldCount; ++ordinal)
    source.Add(dbDataReader.GetName(ordinal));
var list = source.Select(n => new {
                                    n = n,
                                    prop = props.FirstOrDefault<DB.PropInfo<T>>((Func<DB.PropInfo<T>, bool>)(p => string.Equals(p.Name, n, StringComparison.Ordinal)))
                                    ?? props.FirstOrDefault<DB.PropInfo<T>>((Func<DB.PropInfo<T>, bool>)(p => string.Equals(p.Name, n, StringComparison.OrdinalIgnoreCase)))
                                  }
                        )
                 .Select(param0 => new { Name = param0.n, Property = param0.prop })
                 .ToList();

while (dbDataReader.Read())
{
    T instance = Activator.CreateInstance<T>();
    foreach (var data in list)
        data.Property.Setter(instance, Convert.ChangeType(dbDataReader[data.Name], data.Property.Type)); // ERROR HERE
    objList.Add(instance);
}

抛出此异常:

  

ArgumentException:静态属性需要null实例,非静态属性需要非null实例。       参数名称:property

变量instancedata都具有看似有效的值。

这里有什么问题?

2 个答案:

答案 0 :(得分:0)

如何快速修复脏污?

foreach (var data in list)
{
    try
    {
        data.Property.Setter(instance, Convert.ChangeType(dbDataReader[data.Name], data.Property.Type));
    }
    catch(ArgumentException e)
    {
        data.Property.Setter(default(T), Convert.ChangeType(dbDataReader[data.Name], data.Property.Type));
    }
}

答案 1 :(得分:0)

好的,所以我发现了问题。 它实际上是在Setter本身 - 我给出的代码不是最新版本...... ;-( 感谢您的所有建议。