C# 什么时候特定类型实际上是System.Object?
在我的WPF应用程序中,IValueConverter中有以下代码位: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 =
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
,因此您将得到这种类型。