亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將屬性值與反射進行比較

將屬性值與反射進行比較

C#
POPMUISE 2023-09-24 10:49:16
我正在嘗試構建預算最多的 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)

因為一和二實際上是引用類型(即它們是裝箱整數而不是值類型),所以“==”比較器執行引用相等性檢查。


查看完整回答
反對 回復 2023-09-24
  • 1 回答
  • 0 關注
  • 103 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號