2013-11-27 81 views
1

含義,有什麼我可以做的,所以當我嘗試將short指定給bool時,它會調用我的自定義類型從short轉換爲bool是否可以爲類型的賦值添加類型轉換?

我有一個DB第一個POCO模型,並且在250個表的數據庫中生成的整個數據模型中的每個真/假值是short?short。原始的RDBMS沒有布爾值的概念。

現在我不能只是將所有短褲更改爲布爾,因爲在查詢DbContext時出現類型轉換錯誤。我可以用bool替代自定義值類型,前提是我可以在不需要Value屬性的情況下獲取並設置它的值。

public struct BoolThatLikesShorts 
{ 
... 
} 

,然後使用它像BoolThatLikesShorts IsActive = (short)1;,後來用它像

if (IsActive) 
{ 
... 
} 

讓我我們有效地擁有完整bool等同。

+0

我不知道有任何解決方案使這成爲可能..你總是可以寫一個簡稱爲ToBool()的擴展方法,但你可能知道這個.. –

+0

我編輯了我的答案。 – AgentFire

回答

1

如果你的意思是,只要你把這個代碼:

short foo = 4; 
bool bar = (bool)foo; // Or even without cast. 

你有你的自定義TypeConverter(或其他)叫,然後不,沒有這麼容易這樣做的方式

不過,也有一些解決方法:

  • 創建自定義值類型那裏可以隱含鑄造爲bool明確短期其中YourType是具有兩個結構演員在內定義。所以,你可以有

    bool bar = (YourType)(short)3; 
    
  • 創建一個擴展,它可以讓你投這樣

    bool bar = ((short)3).ToBool(); 
    

關於你的答案更新,請在此偷看:Convert value when mapping

+0

我可以在'foo'上放置一個屬性,但是我不能將這個任務改成一個cast。這是針對數據庫查詢結果中EF實體類的automagic實現。 – ProfK

+0

@ProfK爲什麼你不擴展這個問題然後解釋這個以及許多其他有關你正在使用的技術的東西,比如EF,數據映射等等? – AgentFire

+0

我已經擴展了這個問題。我想出了一個甚至可能起作用的實驗性實驗。一個名爲'YesNo'的結構,隱式轉換運算符爲'bool'和'short'。我只是不喜歡'YesNo'這個名字。也許'BOOL'? – ProfK

1

不含蓄,但你可以創建一個擴展方法

public static bool CustomBoolConversion(this short value) 
{ 
    bool retVal; 

    // custom implementation 

    return retVal; 
} 

用法:

short s = 1; 
bool b = s.CustomBoolConversion(); 
相關問題