【问题标题】:PropertyInfo.GetValue(null) - how it should behave?PropertyInfo.GetValue(null) - 它应该如何表现?
【发布时间】:2020-11-12 16:10:27
【问题描述】:

我正在编写一个比较某个类的两个对象的属性,以进一步列出差异。

Class oldObj, newObj;
//some initiation of above

Class classObject = new Class();
var objectKeys = classObject .GetType().GetProperties().ToList();
objectKeys.ForEach(key => {
    var previousKeyValue = key.GetValue(oldObj);
    var newKeyValue = key.GetValue(newObj);
    if (!Equals) {...}
});

在特殊情况下,newObjoldObj 可以为空。

我的问题是,在这种情况下:key.GetValue(null) 我收到 CS0120 异常 - “非静态方法需要一个目标”。

查看 PropertyInfo 选项(来自元数据):

public object? GetValue(object? obj);

我假设它能够处理对象为null 的这种情况,例如返回 null 作为它的值。

您能否解释一下这是否是这段代码的正确行为,或者我在使用 null 时做错了什么? 在这种情况下,我可能会在 ForEach 之前进行一些验证对象是否为空并编写单独的比较代码来处理这种情况。

【问题讨论】:

    标签: c# propertyinfo


    【解决方案1】:

    您误解了传递给GetValue() 的参数的性质。

    当你传入一个对象引用时,这意味着该引用是一个对象实例的实例属性。如果你省略了对象引用,你就是在告诉反射 api 你正在尝试访问一个静态成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      相关资源
      最近更新 更多