کاربرد as در سی شارپ :
روش صحیح استفاده از as در سیشارپ:
در سیشارپ، as برای تبدیل نوع (Casting) استفاده میشود. اگر تبدیل ممکن نباشد، null برمیگرداند. در زیر یک مثال صحیح از استفاده از as در سیشارپ آورده شده است:
کد صحیح در سیشارپ:
using System;
class Program
{
static void Main()
{
object obj = "Hello"; // مقدار obj یک رشته است
string str = obj as string; // تبدیل به string با استفاده از as
if (str != null)
{
Console.WriteLine(str); // خروجی: Hello
}
else
{
Console.WriteLine("Memory type mismatch"); // اگر obj قابل تبدیل به string نباشد
}
// مثال دیگر با یک عدد
object obj2 = 123; // مقدار obj2 یک عدد است
string str2 = obj2 as string; // تبدیل به string با استفاده از as
if (str2 != null)
{
Console.WriteLine(str2);
}
else
{
Console.WriteLine("Memory type mismatch"); // خروجی: Memory type mismatch
}
}
}
توضیحات کد:
تعریف متغیر obj:
object obj = "Hello";
در اینجا، obj از نوع object است و مقدار آن یک رشته ("Hello") است.
استفاده از as:
string str = obj as string;
اگر obj قابل تبدیل به string باشد، str مقدار "Hello" را میگیرد.
در غیر این صورت، str برابر null خواهد بود.
اگر str برابر null نباشد، مقدار آن چاپ میشود.
در غیر این صورت، پیام "Memory type mismatch" نمایش داده میشود.
در مثال دوم، obj2 یک عدد (123) است و نمیتوان آن را به string تبدیل کرد.
بنابراین، str2 برابر null خواهد بود و پیام "Memory type mismatch" چاپ میشود.
تفاوت as با Casting معمولی:
Casting معمولی ((type)variable):
اگر تبدیل ممکن نباشد، یک استثنا (InvalidCastException) پرتاب میشود.
مثال:
object obj = 123;
string str = (string)obj; // خطا: InvalidCastException
استفاده از as:
اگر تبدیل ممکن نباشد، null برمیگرداند و خطایی پرتاب نمیشود.
مثال:
object obj = 123;
string str = obj as string; // str = null
نکات مهم:
as فقط با انواع Reference Type کار میکند:
as فقط برای انواع Reference Type (مانند کلاسها، رشتهها و آرایهها) کار میکند و برای انواع Value Type (مانند int, bool, double و غیره) استفاده نمیشود)
برای انواع Value Type، میتوانید از is و سپس Casting معمولی استفاده کنید.
استفاده از is برای بررسی نوع:
قبل از استفاده از as، میتوانید از is برای بررسی نوع استفاده کنید.
مثال:
if (obj is string)
{
string str = (string)obj;
Console.WriteLine(str);
}
else
{
Console.WriteLine("Memory type mismatch");
}
جمعبندی:
در سیشارپ، از as برای تبدیل نوع (Casting) استفاده میشود و اگر تبدیل ممکن نباشد، null برمیگرداند.