我尝试将一个元素添加到通过反射检索的List中。
以下一行
CREATE PROCEDRUE dbo.my_orig_proc
@id INT,
,@some_param_default INT = 10
AS
BEGIN
IF USER_NAME() = 'user_name' AND @some_param_default <> 10
RAISERROR('You cannot change @some_param_default value' ,16,1);
END
正在抛出错误
对象与目标类型不匹配&#34; (Reflection.TargetException)
但是类型应匹配:
property.PropertyType.GetMethod("Add").Invoke(entity, new[] { innerValue });
string listType=property.PropertyType().FullName; // System.Collections.Generic.List`1[[My.Entities.Task, My.Entities, Version=1.4.6429.20475, Culture=neutral, PublicKeyToken=null]]
string elementType=innerValue.GetType().FullName; // My.Entities.Task
是一个包含上述属性的对象
这里有什么问题?
答案 0 :(得分:4)
您尝试在Add
上调用entitiy
,而不是entity
属性中包含的列表。
获取属性的值(应该是列表)并在该引用上调用Add
:
var list = property.GetValue(entity);
property.PropertyType.GetMethod("Add").Invoke(list, new[] { innerValue });