Middle
Ինչպես է տեղի ունենում տողերի համեմատությունը C#-ում: Համեմատվում են տողերի օբյեկտների հղումները?
sobes.tech AI
Պատասխան AI-ից
C#-ում տողերի համեմատումը կարող է կատարվել մի քանի եղանակով:
==օպերատոր: Տողային լիտերալների համար և եթե տողերը ունեն նույն պարունակությունը,==օպերատորը կվերադարձնիtrue: Այլ ռեֆերենցիոն տիպերի համեմատ,==օպերատորը հագեցած է համեմատել պարունակությունը, ոչ թե հղումները:Equals()մեթոդ: Այս մեթոդը նույնպես համեմատում է տողերի պարունակությունը ըստ նախնական արժեքի: Խորհուրդ է տրվում հստակ համեմատության համար, հատկապեսnull-ի հետ համեմատության ժամանակ: Կան տարբերակներ՝ հաշվի առնելով մեծատառ-փոքրատառ և մշակույթ:String.Compare()մեթոդ: סטատիկ մեթոդ, որը համեմատում է երկու տողեր և վերադարձնում ամբողջ թիվ, որը ցույց է տալիս հարաբերությունը:String.CompareOrdinal()մեթոդ: Համեմատում է տողերը բայթով՝ առանց մշակույթի առանձնահատկությունների:String.CompareTo()մեթոդ: Օբյեկտի մեթոդ, որը համեմատում է ընթացիկ տողը այլ տողի կամ օբյեկտի հետ:
Տողերի օբյեկտային հղումները չեն համեմատվում ուղղակի == կամ Equals() մեթոդով (առանց օգտագործողի կողմից հագեցած տարբերակների) սովորական պարունակության համեմատ: Թեև տողերը ռեֆերենցիոն տիպեր են, == օպերատորն ու Equals() մեթոդը հատուկ հագեցած են պարունակության համեմատության համար:
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Պարունակության համեմատություն
Console.WriteLine(str1 == str2); // true (համեմատվում է պարունակությունը)
Console.WriteLine(str1.Equals(str2)); // true (համեմատվում է պարունակությունը)
Console.WriteLine(str1 == str3); // true (համեմատվում է պարունակությունը)
Console.WriteLine(str1.Equals(str3)); // true (համեմատվում է պարունակությունը)
// Հղումների համեմատություն (պահանջվում է հստակ վերածում կամ `ReferenceEquals`-ի օգտագործում)
// Այս դեպքում str1 և str2 կարող են հղում ունենալ նույն օբյեկտին՝
// տողերի ինտերնինգի պատճառով:
Console.WriteLine(object.ReferenceEquals(str1, str2)); // կարող է լինել true կամ false՝ կախված JIT և CLR-ից
Console.WriteLine(object.ReferenceEquals(str1, str3)); // հավանաբար false