昨天寫代碼,不經意就把引用類型和值類型比較的不同忘記了,有必要記下來提醒自己,以免以后犯一樣的錯誤. 先貼上自己寫的錯誤代碼 Object entryId ="entryid"; var result =sourceDynamicObject.where (o=>o.GetDynamicObjectItemValue<Object>("ParentEntryId")==entryId); 這個錯誤很明顯,引用類型的比較使用==,明顯reslut獲不到值。
C#有以下一些引用類型: 數組(派生于System.Array) 用戶用定義的以下類型: 類:class(派生于System.Object); 接口:interface(接口不是一個“東西”,所以不存在派生于何處的問題。Anders在《C# Programming Language》中說,接口只是表示一種約定[contract]); 委托:delegate(派生于System.Delegate)。 object(System.Object的別名); 字符串:string(System.String的別名)。 可以看出: 引用類型與值類型相同的是,結構體也可以實現接口; 引用類型可以派生出新的類型,而值類型不能; 引用類型可以包含null值,值類型不能(可空類型功能允許將 null 賦給值類型); 引用類型變量的賦值只復制對對象的引用,而不復制對象本身。而將一個值類型變量賦給另一個值類型變量時,將復制包含的值。 對于最后一條,經常混淆的是string。我曾經在一本書的一個早期版本上看到String變量比string變量效率高;我還經常聽說String是引用類型,string是值類型,等等。例如: string s1 = "Hello, "; string s2 = "world!"; string s3 = s1 + s2;//s3 is "Hello, world!" 這確實看起來像一個值類型的賦值。再如: string s1 = "a"; string s2 = s1; s1 = "b";//s2 is still "a" 改變s1的值對s2沒有影響。這更使string看起來像值類型。實際上,這是運算符重載的結果,當s1被改變時,.NET在托管堆上為s1重新分配了內存。這樣的目的,是為了將做為引用類型的string實現為通常語義下的字符串。
通過上面的介紹,下面的結果就很明顯
創新互聯專業為企業提供三元網站建設、三元做網站、三元網站設計、三元網站制作等企業網站建設、網頁設計與制作、三元企業網站模板建站服務,10年三元做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。string s1= "abc";
string s2="abc";
String s3 = new String("abc");
String s4 =new String("abc");
s1==s2 true
s3==s4 false
創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。
分享文章:引用類型和值類型的比較-創新互聯
分享URL:http://vcdvsql.cn/article36/deodsg.html
成都網站建設公司_創新互聯,為您提供微信公眾號、網站內鏈、定制開發、云服務器、品牌網站建設、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯