Middle
C#-da sətirlərin müqayisəsi necə həyata keçirilir? Sətir obyektlərinin istinadları müqayisə olunurmu?
sobes.tech Süni İntellekt
AI-dan cavab
C# dilində sətirlərin müqayisəsi müxtəlif üsullarla həyata keçirilə bilər:
- Operator
==: Sətir literal və əgər sətirlər eyni məzmunu daşıyırsa,==operatorutrueqaytaracaq. Digər referans tiplərdən fərqli olaraq, sətirlər üçün==operatoru məzmunu müqayisə etmək üçün aşırı yüklənmişdir, referanslar deyil. - Metod
Equals(): Bu metod da standart olaraq sətirlərin məzmununu müqayisə edir. Açıqlama ilə məzmun müqayisəsi üçün tövsiyə olunur və xüsusilənullilə müqayisədə daha etibarlıdır. Böyük və kiçik hərfləri və mədəniyyəti nəzərə alan overloadlar mövcuddur. - Metod
String.Compare(): İki sətiri müqayisə edən və onların arasında sıralama əlaqəsini göstərən tam ədəd qaytaran statik metod. Müxtəlif müqayisə parametrlərini (böyük/kicik hərf, mədəniyyət və s.) təyin etməyə imkan verir. - Metod
String.CompareOrdinal(): Sətirləri bayt bayt müqayisə edir, mədəni xüsusiyyətləri nəzərə almadan. - Metod
String.CompareTo(): Nümunə metod olub, cari sətiri başqa sətir və ya obyektlə müqayisə edir.String.Compare()-yə bənzəyir, lakin sətir obyekti üzərində çağırılır.
Sətir obyektlərinin referansları adi məzmun müqayisəsində == və ya Equals() (istifadəçi tərəfindən xüsusi overload olmadan) ilə birbaşa müqayisə edilmir. Gəlin, sətirlər referans tipləri olsa da, == və Equals() xüsusi overload edilərək məzmunu dəqiq müqayisə etmək üçün istifadə olunur.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Məzmun müqayisəsi
Console.WriteLine(str1 == str2); // true (məzmun müqayisə edilir)
Console.WriteLine(str1.Equals(str2)); // true (məzmun müqayisə edilir)
Console.WriteLine(str1 == str3); // true (məzmun müqayisə edilir)
Console.WriteLine(str1.Equals(str3)); // true (məzmun müqayisə edilir)
// Referansların müqayisəsi (açıq çevirmə və ya ReferenceEquals istifadə etməklə)
// Bu halda, str1 və str2 eyni obyektə istinad edə bilər
// sətirlərin internləşdirilməsi sayəsində. str3, ehtimal ki, ayrı bir obyekt olacaq.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // true və ya false ola bilər, JIT və CLR-ə bağlı
Console.WriteLine(object.ReferenceEquals(str1, str3)); // ehtimal ki, false