日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 相等运算

發布時間:2025/7/14 C# 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 相等运算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.?public static bool ReferenceEquals(object left, object right)

Object.ReferenceEquals()在兩個變量引用到同一個對象時返回true,也就是兩個變量具有相同的對象ID。不管比較的類型是引用類型還是值類型的,這個方法總是檢測對象ID,而不是對象內容。

string a = "test"; string b = "test"; if (Object.ReferenceEquals(a, b)) {Console.WriteLine("equal"); } else {Console.WriteLine("not equal"); } //equal

當比對兩個值類型的時候,Object.ReferenceEquals返回false,即使比較的是同一個值類型對象,也會返回false,因為Object.ReferenceEquals輸入的兩個參數是object類型,所以需要對兩個值類型的參數進行裝箱操作,導致兩個對象的ID不同。

int i = 5; int j = 5; if (Object.ReferenceEquals(i, j)) {Console.WriteLine("equal"); } else {Console.WriteLine("not equal"); } //not equalif (Object.ReferenceEquals(i, i)) {Console.WriteLine("ReferenceEquals : equal"); } else {Console.WriteLine("ReferenceEquals : not equal"); } //not equal

2.public virtual bool Equals(object right)

Object.Equals()方法使用對象的ID來斷定兩個變量是否相等。這個默認的Object.Equals()函數的行為與Object.ReferenceEquals()是一樣的。但是請注意,值類型是不一樣的。System.ValueType并沒有重載Object.Equals(),記住,System.ValueType是所有你所創建的值類型(使用關鍵字struct創建)的基類。兩個值類型的變量相等的前提條件是它們的類型和內容都是一樣的。ValueType.Equals()實現了這一行為。不幸的是,ValueType.Equals()并不是一個高效的實現。ValueType.Equals()是所有值類型的基類(譯注:這里是說這個方法在基類上進行比較)。為了提供正確的行為,它必須比較派生類的所有成員變量,而且是在不知道派生類的類型的情況下。在C#里,這就意味著要使用反射。對反射而言它們有太多的不利之處,特別是在以性能為目標的時候。

當你想改變引用類型默認的Equals()語義試,建議重載Equ()方法。

你必須確保你重新定義的方法能滿足數學相等性質:相等的自反性,對稱性和傳遞性。自反性就是說一個對象是等于它自己的,不管對于什么類型,a==a總應該返回true;對稱就是說,如果有a==b為真,那么b==a也必須為真;傳遞性就是說,如果a==b為真,且b==c也為真,那么a==c也必須為真,這就是傳遞性。

標準模式:

public class Foo {public override bool Equals(object right){// check null:// the this pointer is never null in C# methods.if (right == null)return false;if (object.ReferenceEquals(this, right))return true;// Discussed below.if (this.GetType() != right.GetType())return false;// Compare this type's contents here:return CompareFooMembers(this, right as Foo);}private static bool CompareFooMembers(Foo f, Foo b){//do } }

3.== 操作符

?任何時候你創建一個值類型,重新定義操作符==()。原因和實例的Equals()是完全一樣的。默認的版本使用的是引用的比較來比較兩個值類型。

4.public static bool Equals(object left, object right);

靜態的Object.Equals()方法是像下面這樣實現的:

public static bool Equals(object left, object right) {// Check object identityif (left == right)return true;// both null references handled aboveif ((left == null) || (right == null))return false;return left.Equals (right); }

靜態的Equals()是使用左邊參數實例的Equals()方法來斷定兩個對象是否相等。

?

總結

你應該為了更好的性能而總是為值類型實例提供重載的Equals()方法和操作符==()。當你希望引用類型的相等與對象ID的相等不同時,你應該重載引用類型實例的Equals()。

?

轉載于:https://www.cnblogs.com/xanadu123/p/5034405.html

總結

以上是生活随笔為你收集整理的C# 相等运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品啪 | 少妇视频在线播放 | 亚洲欧洲精品一区二区 | 日韩欧美日本 | 精品一区二区三区电影 | 成年人观看视频 | 久久精品2019中文字幕 | 欧美日韩在线观看一区二区 | 国产在线www | 欧美激情综合五月色丁香 | 欧美激情一区二区三区免费观看 | wwwxxx日本 | 日本黄色生活片 | 久久精品屋 | 亚洲综合图 | 成人h动漫精品一区二区无码 | 毛片视频在线免费观看 | av成人在线播放 | 日韩成人在线播放 | 免费荫蒂添的好舒服视频 | 天天爽夜夜爽夜夜爽 | 欧美30p| 日本少妇影院 | 91大片在线观看 | 日本少妇喷水 | 午夜婷婷 | www成人免费视频 | www日韩在线观看 | 少妇一级视频 | 亚洲综合网在线观看 | 超碰91在线观看 | 久久精品一区二区国产 | 黑人vs亚洲人在线播放 | 亚洲色婷婷久久精品av蜜桃 | 久久国产经典 | 久久久国产精华液999999 | 日韩激情在线 | 精品视频无码一区二区三区 | 欧美日韩图片 | 日韩在线资源 | 日韩av网址大全 | 国产人妻aⅴ色偷 | 中文字幕亚洲乱码 | 亚洲国产日韩a在线播放性色 | 日本美女毛片 | www国产一区| 日本黄色三级网站 | 日韩av区| 一区二区久久久 | 91av官网| 国产精品www色诱视频 | 天天插夜夜爽 | 日韩久草 | 三上悠亚ssⅰn939无码播放 | 秘密爱大尺度做爰呻吟 | 影音先锋每日资源 | 国产日韩三级 | 天堂一区在线 | 成人在线超碰 | 午夜福利视频合集1000 | 少妇高潮惨叫久久久久 | 黄在线网站 | 国内一区二区 | 欧美特黄一级视频 | 日韩极品在线 | 成年人视频在线看 | 蜜桃一二三区 | 91免费视频网址 | 91视频综合| 久射网 | 久久精品视频8 | 国产欧美在线观看 | 天天干狠狠操 | 香蕉大人久久国产成人av | 久久久久这里只有精品 | 麻豆蜜桃av | 精品一区二区毛片 | 成人午夜sm精品久久久久久久 | 99热热久久 | 国产一区二区三区在线播放无 | 精品一区二区av | 欧美三级电影在线观看 | 亚洲精品91天天久久人人 | 欧美综合国产 | 天天爽天天色 | 中文字幕在线视频日韩 | 亚洲第一福利网站 | 一级片在线免费观看视频 | 91国产视频在线播放 | 视频一区日韩 | 精品乱码一区二区三四区视频 | 亚洲视频一二区 | 久久久久亚洲AV成人网人人小说 | 宿舍女女闺蜜调教羞辱 | 91免费. | 91成年人网站 | 久久3p| 法国空姐在线观看完整版 | 色黄网站|