Middle
C#да саптардын салыштырылышы кандай болот? Саптардын объекттеринин шилтемелери салыштырылатабы?
sobes.tech AI
AIден жооп
C# тилинде саптардын салыштырылышы бир нече жол менен болушу мүмкүн:
==оператору: Саптардык литерлер жана эгер саптар бирдей мазмунга ээ болсо,==операторуtrueкайтарат. Башка шилтемелүү түрлөрдөн айырмаланып, саптар үчүн==оператору мазмунду салыштырууга жүктөлгөн, шилтемелерге эмес.Equals()методу: Бул метод да мазмунду салыштырат. Аны так салыштыруу үчүн сунушталат жанаnullменен салыштырганда ишенимдүү болушу мүмкүн. Регистр жана маданиятты эске алуу үчүн жүктөлүштөр бар.String.Compare()методу: Статикалык метод, эки сапты салыштырып, алардын ортосундагы тартипти көрсөтүүчү бүтүн санды кайтарат. Түшүнүктүү салыштыруу параметрлерин көрсөтүүгө болот (регистр, маданият жана башка).String.CompareOrdinal()методу: Саптарды байт боюнча салыштырат, маданияттык өзгөчөлүктөрдү эске албастан.String.CompareTo()методу: Инстанциялык метод, ал учурдагы сапты башка сап же объект менен салыштырат.String.Compare()менен окшош, бирок объектте чакырылат.
Саптардын объектке шилтемелери түз салыштырылбайт == же 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