我正在嘗試構建預算最多的 ORM。我有 2 個對象,一個“項目”和一個“原始”,在創建項目時,我只需將其副本保存在一個名為“原始”的變量中。該副本是通過我從這篇文章中竊取的擴展創建的https://stackoverflow.com/a/11308879/10647851所以我想構建我的更新查詢,我認為非常簡單。foreach (PropertyInfo prop in properties) { var one = prop.GetValue(original, null); var typeOne = one.GetType(); var two = prop.GetValue(item, null); var typeTwo = two.GetType(); if(one != two) { ... }}然而,在某些您意想不到的情況下,一不等于二。ID(模型中的類型= int?)2703不等于2703。我單步執行代碼,類型是Int32。布爾值也是問題。字符串起作用。日期時間?的工作。
1 回答

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
使用
if(!object.Equals(one, two)) { ... }
而是進行相等比較。這將調用默認的相等比較器或已實現它的那些類型的重寫比較器(其中包括所有值類型,例如示例中的 int )。
!= 使用引用相等,因此當引用的類型是完全相同的實例時會產生相同的值。由于您使用的是返回對象的 GetValue,因此使用 != 會給您帶來意想不到的結果。
public object GetValue(object obj)
因為一和二實際上是引用類型(即它們是裝箱整數而不是值類型),所以“==”比較器執行引用相等性檢查。
- 1 回答
- 0 關注
- 103 瀏覽
添加回答
舉報
0/150
提交
取消