在我的WPF应用程序中,我在IValueConverter中有以下代码:
if (value.GetType().BaseType != typeof(Member))
return string.Empty;
Member
是一个自动生成的Entity Framework对象。绑定到List<Member>
属性时,它按预期工作 - 转换器接受此比较但不返回。
我正在为这部分代码编写一些单元测试。所以我用它测试了它:
MemberConverter conv = new MemberConverter();
Member mem = new Member{ MemberName = "Arnold" };
var result = conv.Convert((Member)mem, typeof(string), null, null);
result
以String.Empty
的形式返回。
当我单步执行代码时,它就是失败的类型比较。我自己生成的mem
对象的BaseType
为System.Object
。
我可以理解为什么基类型可以返回有一个普通的旧对象。但我不明白为什么它在这两种情况下表现不同。有人可以解释一下,并告诉我我做错了什么吗?
答案 0 :(得分:4)
Entity Framework正在动态创建一个动态类型,它将Member作为基本类型,覆盖您提供的任何虚拟属性,以提供自动“延迟加载”魔法。
您可以考虑改为:
if (!typeof(Member).IsAssignableFrom(value.GetType()))
或者,甚至更直接,因为你有一个实例,而不仅仅是一个类型
if (!(value is Member))