"

مقایسه دو رشته در سی شارپ,مقایسه رشته با عملگر == در سی شارپ,مقایسه دو رشته با Equals در سی شارپ

مقایسه دو رشته در سی شارپ

مقایسه دو رشته در سی‌شارپ با روش‌هایی مانند == و Equals انجام می‌شود و برای بررسی برابر بودن و تفاوت متن کاربرد دارد.

تیم تحریریه
7
0
21 مرداد 1405
لینک کوتاه

مقایسه دو رشته در سی شارپ

مقایسه دو رشته در سی شارپ یکی از عملیات‌های پرکاربرد در برنامه‌نویسی است.
هنگام توسعه نرم‌افزار ممکن است لازم باشد نام کاربر، رمز عبور، کد، نام فایل، مقدار ورودی فرم یا یک عبارت متنی را با رشته دیگری مقایسه کنیم.
زبان #C روش‌های مختلفی برای مقایسه رشته‌ها در اختیار برنامه‌نویس قرار می‌دهد که هرکدام کاربرد خاصی دارند.
در سی شارپ می‌توان دو رشته را با استفاده از عملگر ==، متد Equals، متد String.Compare و روش‌های مختلف StringComparison مقایسه کرد.
انتخاب روش مناسب اهمیت زیادی دارد؛ زیرا در برخی شرایط حساسیت به حروف بزرگ و کوچک، فرهنگ زبان و حتی نوع داده‌ای که در حال مقایسه آن هستیم، روی نتیجه تأثیر می‌گذارد.
طبق مستندات رسمی مایکروسافت، برای بررسی برابری دو رشته بهتر است از Equals استفاده شود و برای تعیین ترتیب رشته‌ها از Compare یا CompareTo استفاده شود.



مقایسه دو رشته در سی شارپ


مقایسه رشته با عملگر == در سی شارپ

ساده‌ترین روش برای مقایسه دو رشته در #C  استفاده از عملگر == است.
در مورد string، این عملگر مقدار رشته‌ها را مقایسه می‌کند، نه اینکه صرفاً بررسی کند دو متغیر به یک شیء اشاره می‌کنند.
string name1 = "Ali";
string name2 = "Ali";

if (name1 == name2)
{
    Console.WriteLine("رشته‌ها برابر هستند");
}


خروجی:

رشته‌ها برابر هستند

اگر مقدار رشته‌ها متفاوت باشد، نتیجه false خواهد بود:

string name1 = "Ali";
string name2 = "Reza";

if (name1 == name2)
{
    Console.WriteLine("برابر");
}
else
{
    Console.WriteLine("نابرابر");
}


عملگر == در مقایسه رشته‌ها به صورت پیش‌فرض به حروف بزرگ و کوچک حساس است. بنابراین:

string text1 = "Hello";
string text2 = "hello";

Console.WriteLine(text1 == text2);


نتیجه:

False


مستندات #C نیز تأکید می‌کند که == برای رشته‌ها مقایسه مقداری انجام می‌دهد و مقایسه پیش‌فرض آن حساس به حروف بزرگ و کوچک و از نوع Ordinal است.

مقایسه دو رشته با Equals در سی شارپ

یکی از روش‌های استاندارد برای بررسی برابر بودن دو رشته، استفاده از متد Equals است.

string firstName = "Ali";
string secondName = "Ali";

bool result = firstName.Equals(secondName);

Console.WriteLine(result);


خروجی:

True


متد Equals زمانی مناسب است که هدف شما پاسخ به این سؤال باشد که آیا دو رشته دقیقاً مقدار یکسانی دارند یا خیر.
متد String.Equals همچنین overloadهایی دارد که اجازه می‌دهند نوع مقایسه را با StringComparison مشخص کنید.

برای مثال:

string text1 = "CSharp";
string text2 = "CSharp";

if (text1.Equals(text2))
{
    Console.WriteLine("برابر هستند");
}




آیا به دنبال یک فرصت عالی برای یادگیری برنامه‌نویسی هستید؟ 🚀

با دوره آموزشی سی‌شارپ ما، شما می‌توانید مهارت‌های خود را به سطح جدیدی ارتقا دهید! این دوره به‌طور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامه‌نویسی سی‌شارپ پیش بروید.

👨‍🏫 چرا دوره ما را انتخاب کنید؟

  • محتوای جامع و عملی: با پروژه‌های واقعی و تمرینات عملی، یادگیری را به تجربه‌ای جذاب تبدیل کنید.
  • مدرس مجرب: از تجربه و دانش مدرس حرفه‌ای بهره‌مند شوید که شما را در هر مرحله از یادگیری راهنمایی می‌کنند.
  • پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
  • دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، می‌توانید به آن مراجعه کنید.

💡 فرصت را از دست ندهید!

بایادگیری سی‌شارپ، می‌توانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژه‌های جذاب و چالش‌برانگیز شرکت کنید.

همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده‌ای روشن‌تر بردارید!

شرکت در دوره آموزش برنامه نویسی سی شارپ

  






مقایسه رشته بدون توجه به حروف بزرگ و کوچک

گاهی لازم است Hello و hello را برابر در نظر بگیریم. برای این کار می‌توان از StringComparison.OrdinalIgnoreCase استفاده کرد.

string text1 = "Hello";
string text2 = "hello";

bool result = string.Equals(
    text1,
    text2,
    StringComparison.OrdinalIgnoreCase
);

Console.WriteLine(result);


خروجی:

True


این روش برای مقایسه‌هایی که به زبان طبیعی وابسته نیستند، مانند شناسه‌ها، کلیدها، مسیرها و مقادیر فنی، انتخاب مناسبی است.
مایکروسافت نیز استفاده از Ordinal یا OrdinalIgnoreCase را برای چنین داده‌هایی توصیه می‌کند.

StringComparison در مقایسه رشته‌ها در سی‌شارپ

StringComparison مشخص می‌کند مقایسه رشته‌ها با چه قوانینی انجام شود.
چند مقدار مهم آن عبارت‌اند از:

مقدار کاربرد
Ordinal مقایسه دقیق و مستقیم رشته‌ها بر اساس مقدار کاراکترها
OrdinalIgnoreCase مقایسه مستقیم رشته‌ها بدون توجه به حروف بزرگ و کوچک
CurrentCulture مقایسه رشته‌ها بر اساس قواعد زبانی تنظیم‌شده در سیستم
CurrentCultureIgnoreCase مقایسه رشته‌ها بر اساس قواعد زبانی سیستم، بدون توجه به حروف بزرگ و کوچک
InvariantCulture   مقایسه رشته‌ها بر اساس قواعد زبانی ثابت و استاندارد
InvariantCultureIgnoreCase مقایسه رشته‌ها بر اساس قواعد زبانی ثابت، بدون توجه به حروف بزرگ و کوچک

   

برای مثال:

string username1 = "Admin";
string username2 = "admin";

bool result = string.Equals(
    username1,
    username2,
    StringComparison.OrdinalIgnoreCase
);

Console.WriteLine(result);


نتیجه:

True


انتخاب نوع StringComparison باید بر اساس نوع داده انجام شود.
برای داده‌های فنی و غیرزبانی معمولاً مقایسه Ordinal انتخاب مناسبی است، در حالی که برای متن‌هایی که کاربر می‌خواند و مرتب می‌کند، مقایسه مبتنی بر فرهنگ می‌تواند مناسب‌تر باشد.


StringComparison در مقایسه رشته‌ها در سی‌شارپ

مقایسه دو رشته با String.Compare

متد String.Compare با Equals تفاوت مهمی دارد.
Equals معمولاً برای پاسخ به این سؤال استفاده می‌شود که «آیا این دو رشته برابر هستند؟»، اما Compare برای تعیین ترتیب دو رشته کاربرد دارد.

string first = "Apple";
string second = "Banana";

int result = string.Compare(first, second);

Console.WriteLine(result);


اگر رشته اول از نظر ترتیب قبل از رشته دوم باشد، نتیجه منفی خواهد بود.
اگر دو رشته از نظر مقایسه برابر باشند، نتیجه صفر است و اگر رشته اول بعد از رشته دوم قرار بگیرد، نتیجه مثبت خواهد بود.

برای نمونه:

string first = "Apple";
string second = "Banana";

int result = string.Compare(
    first,
    second,
    StringComparison.Ordinal
);

if (result < 0)
{
    Console.WriteLine("رشته اول قبل از رشته دوم است");
}
else if (result == 0)
{
    Console.WriteLine("دو رشته برابر هستند");
}
else
{
    Console.WriteLine("رشته اول بعد از رشته دوم است");
}


بنابراین نباید String.Compare را انتخاب اول برای بررسی برابری دو رشته قرار داد.
برای بررسی برابری، String.Equals روش مناسب‌تری است.


مقایسه با CompareTo

متد CompareTo نیز برای مقایسه ترتیب رشته‌ها استفاده می‌شود.

string first = "Apple";
string second = "Banana";

int result = first.CompareTo(second);

Console.WriteLine(result);


مانند String.Compare، نتیجه CompareTo می‌تواند منفی، صفر یا مثبت باشد.

با این حال، اگر هدف فقط بررسی برابر بودن دو رشته است، بهتر است به جای استفاده از CompareTo از Equals استفاده کنیم.
مستندات .NET نیز CompareTo را عمدتاً برای مقایسه ترتیب و مرتب‌سازی معرفی می‌کند.

تفاوت == و Equals در سی شارپ

یکی از سؤالات رایج برنامه‌نویسان این است که برای مقایسه دو رشته از == استفاده کنیم یا Equals.

مثال:

string a = "Hello";
string b = "Hello";

Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b));


هر دو نتیجه True خواهند بود.

در #C، عملگر == برای string به گونه‌ای تعریف شده که مقدار رشته‌ها را مقایسه کند.
بنابراین برخلاف برخی زبان‌ها، تصور اینکه == در اینجا فقط آدرس اشیا را مقایسه می‌کند، درست نیست.

با این حال، Equals مزیت مهمی دارد و آن امکان مشخص کردن نوع مقایسه است:

string.Equals(
    a,
    b,
    StringComparison.OrdinalIgnoreCase
);


به همین دلیل در کدهای حرفه‌ای که نوع مقایسه اهمیت دارد، استفاده از Equals همراه با StringComparison می‌تواند شفاف‌تر باشد.

کدام روش برای مقایسه دو رشته بهتر است؟

انتخاب روش مناسب به هدف برنامه بستگی دارد:


هدف روش پیشنهادی
مقایسه ساده دو رشته ==
بررسی برابری دقیق  String.Equals
مقایسه بدون توجه به حروف  String.Equals(..., OrdinalIgnoreCase)
مقایسه شناسه‌ها  Ordinal
مقایسه شناسه بدون حساسیت به حروف OrdinalIgnoreCase
تعیین ترتیب دو رشته  String.Compare
مرتب‌سازی String.Compare یا مقایسه مناسب برای سناریو
بررسی وجود یک عبارت Contains
بررسی شروع متن StartsWith
بررسی پایان متن  EndsWith

    
به طور کلی، برای داده‌های غیرزبانی مانند شناسه‌ها، کلیدها و توکن‌های متنی، Ordinal یا OrdinalIgnoreCase انتخاب مناسبی است؛ در حالی که برای متن طبیعی و نمایش داده‌ها به کاربر باید شرایط فرهنگی و زبانی را نیز در نظر گرفت.


کدام روش برای مقایسه دو رشته بهتر است؟

جمع‌بندی

مقایسه دو رشته در سی شارپ یکی از مفاهیم پایه اما بسیار مهم در برنامه‌نویسی #C است.
روش‌های مختلفی برای این کار وجود دارد و انتخاب روش مناسب به هدف مقایسه بستگی دارد.

اگر فقط به یک مقایسه ساده نیاز دارید، عملگر == گزینه‌ای ساده و خوانا است.
برای بررسی دقیق برابری دو رشته، String.Equals انتخاب مناسبی است و زمانی که حساسیت به حروف بزرگ و کوچک اهمیت ندارد، می‌توان از StringComparison.OrdinalIgnoreCase استفاده کرد.

از طرف دیگر، String.Compare و CompareTo بیشتر برای مشخص کردن ترتیب رشته‌ها و عملیات مرتب‌سازی کاربرد دارند.
همچنین هنگام کار با داده‌های فنی بهتر است از مقایسه‌های Ordinal استفاده شود تا نتیجه به فرهنگ سیستم وابسته نباشد.

در نتیجه، یک برنامه‌نویس #C نباید صرفاً بر اساس عادت از یک روش برای تمام مقایسه‌های رشته‌ای استفاده کند.
شناخت تفاوت میان ==، Equals، String.Compare و انواع StringComparison باعث می‌شود کد نوشته‌شده دقیق‌تر، قابل‌اعتمادتر و متناسب با نیاز واقعی برنامه باشد.

محصولات مرتبط

کاربران ما

شما هم نظرتون با ما دریاره “مقایسه دو رشته در سی شارپ” اشتراک بزارید

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو