通过反射向List添加元素

时间:2017-08-08 13:48:29

标签: c# list reflection

我尝试将一个元素添加到通过反射检索的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 是一个包含上述属性的对象

这里有什么问题?

1 个答案:

答案 0 :(得分:4)

您尝试在Add上调用entitiy,而不是entity属性中包含的列表。

获取属性的(应该是列表)并在该引用上调用Add

var list = property.GetValue(entity);
property.PropertyType.GetMethod("Add").Invoke(list, new[] { innerValue });