第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

將屬性值與反射進(jìn)行比較

將屬性值與反射進(jìn)行比較

C#
POPMUISE 2023-09-24 10:49:16
我正在嘗試構(gòu)建預(yù)算最多的 ORM。我有 2 個對象,一個“項目”和一個“原始”,在創(chuàng)建項目時,我只需將其副本保存在一個名為“原始”的變量中。該副本是通過我從這篇文章中竊取的擴(kuò)展創(chuàng)建的https://stackoverflow.com/a/11308879/10647851所以我想構(gòu)建我的更新查詢,我認(rèn)為非常簡單。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。我單步執(zhí)行代碼,類型是Int32。布爾值也是問題。字符串起作用。日期時間?的工作。
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗 獲得超4個贊

使用

if(!object.Equals(one, two)) { ... }

而是進(jìn)行相等比較。這將調(diào)用默認(rèn)的相等比較器或已實現(xiàn)它的那些類型的重寫比較器(其中包括所有值類型,例如示例中的 int )。

!= 使用引用相等,因此當(dāng)引用的類型是完全相同的實例時會產(chǎn)生相同的值。由于您使用的是返回對象的 GetValue,因此使用 != 會給您帶來意想不到的結(jié)果。

public object GetValue(object obj)

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


查看完整回答
反對 回復(fù) 2023-09-24
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號