2014-11-03 70 views
0

在我的WPF應用程序,我在的IValueConverter下面的代碼位:什麼時候是一個特定的類型實際上是一個System.Object?

if (value.GetType().BaseType != typeof(Member)) 
    return string.Empty; 

Member是自動生成的實體框架對象。當綁定到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對象有BaseTypeSystem.Object

我可以理解爲什麼基本類型可能會返回一個普通的舊對象。但我不明白爲什麼在這兩種情況下表現不同。有人可以解釋,並告訴我我做錯了什麼?

+1

每個對象始終是一個'System.Object' – Jodrell 2014-11-03 16:58:54

+0

基本類型是給定類型繼承其成員的直接類型。對於直接從'Member'派生的生成類型,其基類型也是'Member'。但是,如果您傳遞'Member'的實例,則會詢問'Member'類型的基類型。由於所有對象(_unusally_)都從'System.Object'繼承,所以你會得到這種類型。 – IllidanS4 2014-11-03 17:30:17

回答

4

實體框架正在創建一個動態類型,以會員爲基礎類型,覆蓋您提供的任何虛擬屬性以提供自動'延遲加載'魔術。

你可能會考慮這樣做,而不是:

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

或者,更直接,因爲你有一個實例,而不僅僅是一個類型

if (!(value is Member)) 
相關問題