gpt4 book ai didi

c# - 如何比较具有不同 ReflectedType 值的相同 PropertyInfo?

转载 作者:太空狗 更新时间:2023-10-29 22:57:39 25 4
gpt4 key购买 nike

这是一个演示问题的简单测试:

class MyBase { public int Foo { get; set; } }    
class MyClass : MyBase { }
[TestMethod]
public void TestPropertyCompare()
{
var prop1 = typeof(MyBase).GetProperty("Foo");
var prop2 = typeof(MyClass).GetProperty("Foo");
Assert.IsTrue(prop1 == prop2); // fails
//Assert.IsTrue(prop1.Equals(prop2)); // also fails
}

我需要一个比较方法来确定这两个属性实际上代表相同的属性。这样做的正确方法是什么?

特别是我想检查属性是否真的来自基类,并且没有以任何方式改变,比如覆盖(使用 override int Foo)、隐藏(使用 new int Foo) >) 属性、接口(interface)属性(即派生类 ISome.Foo 中的显式实现)或任何其他导致在 instanceOfDerived.Foo 时不调用 MyBase.Foo 的方式 被使用。

最佳答案

ReflectedType 始终返回您进行反射的类型。 DeclaringType 告诉属性在哪种类型中声明。因此您需要将 equal check 替换为:

public static class TypeExtensions
{
public static bool PropertyEquals(this PropertyInfo property, PropertyInfo other)
{
return property.DeclaringType == other.DeclaringType
&& property.Name == other.Name;
}
}

用法:

var prop1 = typeof(MyBase).GetProperty("Foo");
var prop2 = typeof(MyClass).GetProperty("Foo");
var isSame = prop1.PropertyEquals(prop2); //will return true

编辑:删除了评论中@Rob 建议的 PropertyType 检查。

关于c# - 如何比较具有不同 ReflectedType 值的相同 PropertyInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com