سؤال

أنا أبحث عن ما يعادل C # default الكلمة الأساسية، على سبيل المثال:

public T GetNext()
{
    T temp = default(T);
            ...

شكرًا

هل كانت مفيدة؟

المحلول

لقد وجدت هذا في مدونة: "كيف يبدو رمز C # هذا في F #؟ (الجزء الأول: التعبيرات والبيانات)"

C # لديه مشغل يسمى "الافتراضي" الذي يرجع قيمة التهيئة الصفرية لنوع معين:

default(int) 

لديها فائدة محدودة؛ الأكثر شيوعا قد تستخدم الافتراضي (T) في عام. F # لديه بناء مماثل كدالة مكتبة:

Unchecked.defaultof<int>

نصائح أخرى

من الناحية الفنية وظيفة F # Unchecked.defaultof<'a> هو ما يعادل default المشغل في ج #. ومع ذلك، أعتقد أنه يستحق أن defaultof يعتبر غير آمن شيء في F # وينبغي استخدامه فقط عندما يكون ذلك ضروريا حقا (تماما مثل استخدام null, والذي يشجع أيضا في F #).

في معظم الوضع، يمكنك تجنب الحاجة إلى defaultof باستخدام option<'a> يكتب. يسمح لك بتمثيل حقيقة أن القيمة غير متوفرة بعد.

ومع ذلك، إليك مثال موجز لإظهار الفكرة. رمز C # التالي:

T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;

ربما تكون مكتوبة مثل هذا في F # (باستخدام ميزات حتمية):

let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with 
| None -> bar(arg)
| Some(temp) -> temp

بالطبع هذا يعتمد على سيناريو الخاص بك وفي بعض الحالات defaultof هو الشيء الوحيد الذي يمكنك القيام به. ومع ذلك، أردت فقط أن أشير إلى ذلك defaultof يستخدم أقل تواترا في F #.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top