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

C# 什么时候特定类型实际上是System.Object?,c#,wpf,types,C#,Wpf,Types,在我的WPF应用程序中,IValueConverter中有以下代码位: if (value.GetType().BaseType != typeof(Member)) return string.Empty; 成员是自动生成的实体框架对象。当绑定到List的属性时,它会按预期工作-转换器接受此比较,不会返回 我目前正在为这部分代码编写一些单元测试。所以我用这个测试它: MemberConverter conv = new MemberConverter(); Member mem =

在我的WPF应用程序中,IValueConverter中有以下代码位:

if (value.GetType().BaseType != typeof(Member))
    return string.Empty;
成员
是自动生成的实体框架对象。当绑定到
List
的属性时,它会按预期工作-转换器接受此比较,不会返回

我目前正在为这部分代码编写一些单元测试。所以我用这个测试它:

MemberConverter conv = new MemberConverter();
Member mem = new Member{ MemberName = "Arnold" };
var result = conv.Convert((Member)mem, typeof(string), null, null);
result
返回为
String.Empty

当我逐步浏览代码时,失败的是类型比较。我自己生成的
mem
对象具有
System.object的
BaseType


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

实体框架正在动态创建一个以成员为基类型的动态类型,覆盖您提供的任何虚拟属性,以提供自动“延迟加载”的魔力

你可以考虑这样做:

if (!typeof(Member).IsAssignableFrom(value.GetType()))
或者,更直接地说,因为您有一个实例,而不仅仅是一个类型

if (!(value is Member))

实体框架正在动态创建一个动态类型,该类型将成员作为基本类型,覆盖您提供的任何虚拟属性以提供自动“延迟加载”功能

你可以考虑这样做:

if (!typeof(Member).IsAssignableFrom(value.GetType()))
或者,更直接地说,因为您有一个实例,而不仅仅是一个类型

if (!(value is Member))

每个对象始终是一个
系统。对象
基类型是给定类型从其成员继承的直接类型。对于直接从
成员
派生的生成类型,其基类型也是
成员
。但是如果您传递了
成员的实例
,您将询问
成员
类型其基本类型是什么。由于所有对象(不常见)都继承自
System.Object
,因此您将获得此类型。每个对象始终是
System.Object
基类型是给定类型从中继承其成员的直接类型。对于直接从
成员
派生的生成类型,其基类型也是
成员
。但是如果您传递了
成员的实例
,您将询问
成员
类型其基本类型是什么。而且,由于所有对象(unusally)都继承自
System.Object
,因此您将得到这种类型。