مقایسه رشتهها در #C
دراین نوشتهعلمی میخواهیم به حرفهها (string) بپردازیم. طراحی اپلیکیشن در مشهد در اینجا یاد خواهید گرفت کدام طریق در C# برای رسیدگی اینکه آیا دو فن با هم موازی میباشند یا این که خیر شایسته ترین طرز میباشد.
شما میتوانید برابری حرفهها را با دو طریق پایین رسیدگی فرمایید:
با به کارگیری از عملگر ==
با به کار گیری از روال Equals()
نکته: سیشارپ همینطور مشتمل بر متدهای String.Compare() و String.CompareTo() میباشد، البته این متدها به معنای مقایسه تساوی حرفه نیستند، بلکه مراد رسیدگی شرایطهای نسبی حرفهها به ترتیب آراستهگردیدهاست. در اینجا ما صرفا می خواهیم برابری دو فن را پژوهش کنیم و خیر حالت تر و تمیزسازی را، بدین ترتیب ما این سوژه را پوشش نمیدهیم.
بیایید سناریوهای متفاوتی را از مقایسه برابری حرفهها ببینیم.
مقایسه فنهای حساس به حروف
هر دو نحوه == و اسلوب Equals() محتوای فنها را مقایسه مینمایند. براین اساس زمانی شما حرفههای حساس به حروف و در en culture (فرهنگ و تمدن انگلیسی) را مقایسه میکنید هیچ تفاوتی در بین آنان نیست.
string str1 = "London";
string str2 = "London";
str1 == str2; // true
str1.Equals(str2); // true
چه اتفاقی میفتد درصورتیکه یک فن null باشد؟
string str1 = "London";
string str2 = null;
str1 == str2; // false
str1.Equals(str2); // false
str2.Equals(str1); // NullReferenceException
همانگونه که در ابتدا مشاهده می کنید، در حالتیکه حرفهای null باشد، با عملگر == هیچ مشکلی نیست. ولی فراخوانی مشی Equals() بر روی null، NullReferenceException را پرتاب مینماید. براین اساس پیش از فراخوانی روال Equals() مطمئن گردید که مقدار حرفه null وجود ندارد.
اکنون نمونه تحت را در مقایسه یک فن با یک آبجکت در حیث بگیرید.
string str1 = "London";
object obj = "London";
str1 == obj; // true
str1.Equals( obj); // true
obj.Equals(str1); // true
بدین ترتیب هنگام مقایسه یک حرفه با یک آبجکت، سود درست می دهد.
اکنون بیایید سناریوی مقداری غامضتری را ببینیم.
string str = "London";
StringBuilder sb = new StringBuilder("London");
object obj = sb.ToString();
str == obj; // false
str == sb.ToString();// true
str.Equals(obj);// true
obj.Equals(str1); //true
در نمونه بالا، اگرچه مقادیر شبیه میباشند، str == obj مقدار false را برمیگرداند. چرا؟
نوع String، overload عملگر == را انجام مینماید، که مقدار دو عملوند را مقایسه مینماید. با این اکنون بعداز تبدیل کردن StringBuilder به object، overloadهای گوناگون را فراخوانی مینماید که رفرنس دو عملوند را مقایسه مینماید. به این ترتیب str == obj فیض نادرستی را می دهد.
پس چنانچه در درحال حاضر مقایسه فنهای حساس به حروف می باشید، در اکثر موردها == و Equals() خلق شبیه دارا هستند. ولی در سناریویی مانند نمونه بالا، == فیض نادرستی می دهد.
مقایسه حرفههای غیر حساس به حروف
عملگر == مدام فنهای حساس به حروف را مقایسه مینماید.
برچسب: طراحی اپلیکیشن در مشهد،