如何清除动态对象内的值?

时间:2014-08-26 05:10:46

标签: c# wpf reflection silverlight-4.0 dataset

我正在将数据集转换为动态集合并绑定它,这工作正常。现在我需要添加一个对集合为空的新对象。我正在尝试的是获取datagrid的ItemsSource并获取列表中的第一个对象。但它内部有一些价值。如何删除值并使用反射绑定空对象。

这是我的代码,

    IEnumerable<object> collection = this.RetrieveGrid.ItemsSource.Cast<object>();
    List<object> list = collection.ToList();
    //i need to clear the values inside list[0]
    object name = list[0];
    //here i build the properties of the object, now i need to create an empty object using these properties and add it to the list
    PropertyInfo[] pis = list[0].GetType().GetProperties();

3 个答案:

答案 0 :(得分:2)

如果你的未知类型有一些已知的构造函数,那么你可以使用反射来实例化它。

// gets the Type
Type type = list[0].GetType(); 

// gets public, parameterless constructor
ConstructorInfo ci = type.GetConstructor(new Type[0]);

// instantiates the object
object obj = ci.Invoke(new object[0]);

显然,当你没有一个简单的无参数构造函数时,它将无法工作。如果您知道类构造函数总是采用某个参数,例如整数值,那么您可以使用new Type[] { typeof(int) }new object[] { someIntValue }修改上面的代码段。

但这是否会创造一个空的&#34;对象与否取决于构造函数的行为。


如果您想要设置一些属性,可以通过调用PropertyInfos来迭代type.GetProperties(),并使用适当的值调用SetValue

答案 1 :(得分:1)

调用Activator.CreateInstance创建新实例。然后使用PropertyInfo.SetValue将字符串字段设置为空。

Type requiredType = list[0].GetType();
object instance = Activator.CreateInstance(requiredType);
PropertyInfo[] pis = requiredType.GetProperties();
foreach (var p in pis)
{
    if (p.PropertyType == typeof(string))
    {
        p.SetValue(instance, string.Empty);
    }
}

请注意,如果类型没有无参数构造函数,Activator.CreateInstance会抛出异常。

答案 2 :(得分:0)

  1. 获取该对象的类型并创建新对象,并将其添加到 列表,列表[0]

  2. 编写一个函数,传递此对象,获取其类型,清除单个属性,     如果您知道它包含哪些属性