دراین نوشتهی علمی میخواهیم به فنها (string) بپردازیم. طراحی اپلیکیشن در اینجا یاد خواهید گرفت کدام طرز در C# برای رسیدگی اینکه آیا دو فن با هم موازی می باشند یا این که خیر شایسته ترین طریق میباشد.
مقایسه فنها در #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() خلق شبیه داراهستند. البته در سناریویی مانند نمونه بالا، == سود نادرستی می دهد.
مقایسه حرفههای غیر حساس به حروف
عملگر == مدام حرفههای حساس به حروف را مقایسه مینماید.