什么时候特定类型实际上是System.Object?

时间:2014-11-03 16:49:36

标签: c# wpf types

在我的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);

resultString.Empty的形式返回。

当我单步执行代码时,它就是失败的类型比较。我自己生成的mem对象的BaseTypeSystem.Object

我可以理解为什么基类型可以返回有一个普通的旧对象。但我不明白为什么它在这两种情况下表现不同。有人可以解释一下,并告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:4)

Entity Framework正在动态创建一个动态类型,它将Member作为基本类型,覆盖您提供的任何虚拟属性,以提供自动“延迟加载”魔法。

您可以考虑改为:

if (!typeof(Member).IsAssignableFrom(value.GetType()))

或者,甚至更直接,因为你有一个实例,而不仅仅是一个类型

if (!(value is Member))