如何使用反射将属性的值设置为 null

kal*_*o12 2 c# reflection

我想使用反射将LastName的值设置为 null。

public void SetPropertyValueToNull(Type t)
{
    PropertyInfo prop = t.GetProperty("LastName");
    prop.SetValue(t, null, null);
}
Run Code Online (Sandbox Code Playgroud)

我将typeof(User)作为来自另一个类的参数传递,其中User是一个模型类,它的LastName作为属性之一。它给了我对象与目标类型不匹配的错误。

我该如何解决这个问题?

Yac*_*sad 5

它给了我对象与目标类型不匹配的错误。

SetValue方法的第一个参数是要在其上设置属性值的对象实例。

您将t自身作为第一个类型的参数传递Type。您应该传递一个类型等于 的对象t,例如User在您的特定情况下。

你应该改变你的方法来接受一个对象实例而不是 aType并且你可以使用它来获取它的类型,获取属性然后设置它的值。

所以你的方法应该是这样的:

public void SetPropertyValueToNull(object instance)
{
    PropertyInfo prop = instance.GetType().GetProperty("LastName");
    prop.SetValue(instance, null, null); //We need this overload for .NET < 4.5
}
Run Code Online (Sandbox Code Playgroud)

此方法适用于具有名为 的可写属性的任何对象LastName