使用 Action(T, object) 时出错
Error using Action(T, object)
我正在调试别人的源代码,我不太确定它是如何工作的,所以有点卡住了。
此代码:
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: Static property requires null instance, non-static property requires non-null instance.
Parameter name: property
变量 instance
和 data
看起来都是有效值。
请问这里有什么问题吗?
快速脏修复怎么样?
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));
}
}
好的,所以我找到了问题。
它实际上在 Setter 本身内 - 我得到的代码不是最新版本......;-(
感谢所有的建议。
我正在调试别人的源代码,我不太确定它是如何工作的,所以有点卡住了。
此代码:
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: Static property requires null instance, non-static property requires non-null instance. Parameter name: property
变量 instance
和 data
看起来都是有效值。
请问这里有什么问题吗?
快速脏修复怎么样?
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));
}
}
好的,所以我找到了问题。 它实际上在 Setter 本身内 - 我得到的代码不是最新版本......;-( 感谢所有的建议。