- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是一个演示问题的简单测试:
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/
我正在制作一个辅助方法,它会自动为给定实体(类)的属性设置随机值,这样我就不必在测试时为每个属性填充一个值。 在我的例子中,每个实体都继承自 BaseEntity 类,该类具有 ID、CreatedB
我知道 typeof(T) == typeof(T)永远为真,因为 Type对象基本上是静态的,只有一个 Type每个类类型都存在实例(如果这是错误的,请纠正我......我有几个程序在这个假设下运行
我有以下类属性: [EffectAspect(Enums.Effects.Low)] public int Wind { set; get; } [EffectAspect(Enums.Effects
例如,我有这个简单的类: public class MyClass { public String MyProperty { get; set; } } 获取 MyProperty 的 Prope
假设我有这门课: class Test123 where T : struct { public Nullable Test {get;set;} } 和这个类 class Test321 {
如何按照类中的排列顺序获取类型 FieldInfos/PropertyInfos 作为 MemberInfo 数组? class Test { public bool First { get;
我想获取特定属性的 PropertyInfo。我可以使用: foreach(PropertyInfo p in typeof(MyObject).GetProperties()) { if (
我想忽略属性信息如下的属性; PropertyInfo propertyInfo = typeof(GLAccount).GetProperty("ExampleProp"); modelBuilde
我验证了 GetHashCode 和 Equals 允许将 PropertyInfo 用作字典键。 (具体来说,哈希码相同,Equals 返回 true。) 那么使用 PropertyInfo 作为字
我对 C# 反射有疑问。我要反射(reflect)的对象如下: public partial class ApplicationUser : IdentityUser { public App
我在反射、动态调用对象和读取集合值方面遇到问题。 在 Referenced COM/Interop 中,它看起来像这样: ICollection collection = (ICollection)s
这个问题在这里已经有了答案: PropertyInfo : is the property an indexer? (2 个答案) 关闭 7 年前。 我在一个类中有一个索引器方法,允许我这样做: v
这个问题在这里已经有了答案: Using PropertyInfo.GetValue() (1 个回答) 关闭 5 年前。 我有以下类(class): public class MagicMetad
我需要通过 Tag 类在 BFrame 类中设置 Value 属性。 我应该如何设置 Value 属性(property)? 澄清: 我不是要设置 Frame 的值 内的属性 Tag 类但是 Valu
使用反射我只想检索具有 get 和 set 方法的属性,而忽略只有 get 的属性.我想做的是为用户提供他/她能够更改的变量列表,因此向他们显示只有 get 方法的属性会产生误导。 给定下面的代码,用
这个问题在这里已经有了答案: How to get the PropertyInfo of a specific property? (5 个答案) 关闭 9 年前。 我在 Myclass 中有一个
我正在创建一个小型验证框架,我有一个可分配给方法的自定义 Validation Attribute 和 ValidationCore 中的一个 IsValid 属性> 类。当 IsValid 在方法内
在第一个内部循环中,当从 PropertyInfo[] 获取值时,我能够传递正确的目标对象,但是在第二个内部循环中,它给出了目标对象不正确的异常. 所以我想要的是获取具有此 listPropertie
我有一个带有子类地址的客户类 internal class Customer { public int id { get; set; } public string name {
我遇到了与 this one 类似的错误,但不幸的是不是同样简单的解决方案。这是代码: public virtual void MapObject(T obj, IViewModel viewMode
我是一名优秀的程序员,十分优秀!