الـ as في C# هو (Casting Operator) يستخدم لتحويل كائن إلى نوع معين بشكل آمن.
بيختلف عن الـ Cs Type Casting، إذا لم يكن الكائن من النوع المطلوب، فإنه يُرجع null بدلاً من التسبب في استثناء (Exception).
هذا يجعل استخدامه أكثر أمانًا مقارنةً باستخدام التحويل التقليدي ((Type)) الذي قد يسبب استثناءً إذا فشل التحويل.
الصيغة الأساسية:
object myObject = ...;
Type myVariable = myObject as Type;- إذا كان
myObjectيمكن تحويله إلى النوعType، فسيتم التحويل وتخزينه في المتغيرmyVariable. - إذا لم يكن من الممكن التحويل، فإن
myVariableسيأخذ قيمةnull.
مثال بسيط:
object myObject = "Hello, World!";
string myString = myObject as string;
if (myString != null)
{
Console.WriteLine($"The string is: {myString}");
}
else
{
Console.WriteLine("The object is not a string.");
}شرح المثال:
- هنا لدينا كائن
myObjectمن النوعobjectويحمل string. - نستخدم
asلتحويل هذا الكائن إلىstring. إذا كان الكائن بالفعل string، سيتم تخزينه في المتغيرmyString. - إذا لم يكن التحويل ممكنًا (على سبيل المثال، إذا كان
myObjectيحمل نوعًا آخر مثلint)، سيأخذmyStringقيمةnull. - نتحقق بعد ذلك من قيمة
myStringللتأكد من نجاح التحويل.
مثال آخر:
object myObject = 123;
string myString = myObject as string;
if (myString == null)
{
Console.WriteLine("The object is not a string.");
}في هذا المثال:
- الـ
myObjectيحمل قيمة عدد صحيحint. - عند محاولة تحويله إلى
stringباستخدامas، لن يتمكن من التحويل لأن الكائن ليس من النوعstring. - وبالتالي، ستكون قيمة
myStringهيnull، ويتم تنفيذ الكود داخل الجملة الشرطية.
مميزات استخدام as:
- آمن: بدلاً من إطلاق استثناء عند فشل التحويل كما في التحويل التقليدي، يُرجع
null، مما يسمح بمعالجة الفشل بشكل سلس. - أقل تكلفة: بدلاً من إجراء عملية فحص النوع مرتين (مرة باستخدام Cs is ثم التحويل)، يمكنك التحويل مباشرة باستخدام
as، مما يحسن الأداء في بعض الحالات.
ملاحظة:
- مشغل
asيعمل فقط مع الأنواع المرجعية (Reference Types) و الأنواع القابلة للتحويل ضمنيًا (nullable types). - لا يمكن استخدامه مع الأنواع البدائية (مثل
intأوbool).