قيم خالية (F#)
Th هو الموضوع يصف كيفية القيمة فارغة هو المستخدمة في ب #.
null القيمة
القيمة خالية هو لا عادة استخدامها في F# القيم أو المتغيرات. على الرغم من ذلك، يظهر فارغ كـ القيمة غير طبيعي في بعض المواقف. إذا كان نوع هو المعرفة في F#, فارغة هو غير مسموح بها كقيمة عادية ما لم تكن السمة AllowNullLiteral هو المطبق على النوع. إذا تم تعريف نوع في لغة أخرى في.NET، فارغة قيمة ممكنة، وعندما interoperating مع مثل أنواع، فقد تواجه تعليمات برمجية F# قيم الخالية.
لنوع تعريف F# ويستخدم فقط من F#, الطريقة الوحيدة لإنشاء القيمة فارغة باستخدام مكتبة F# مباشرة هو لاستخدام غير محدد.defaultof أو صفيفة.zeroCreate . ومع ذلك، ب # كتابته هو المستخدمة من لغات.NET الأخرى، أو إذا كنت تستخدم هذا النوع مع API التي هو غير المكتوبة في F#, مثل إطار عمل.NET، يمكن أن تحدث قيم الخالية.
يمكنك استخدم optionنوع F# عندما كنت قد استخدم متغير مرجع بقيمة خالية ممكن في لغة.NET آخر. بدلاً من القيمة خالية، مع F# optionنوع، يمكنك استخدام القيمة خيار Noneإذا كان هناك هو لا يوجد كائن. استخدمت في خيار القيمة Some(obj)مع كائن objعند وجود هو على كائن. لمزيد من المعلومات، راجع خيارات (F#).
nullالكلمة الأساسية هو كلمة أساسية صالحة في اللغة F#، وتم استخدامه عند العمل مع نقطة الوصول لإطار عمل.NET هو أو نقطة الوصول الأخرى هو التي تتم كتابتها في لغة.NET آخر. يتم حالتين التي قد تحتاج القيمة فارغة عند استدعاء واجهة برمجة تطبيقات.NET و pكـs القيمة خالية كـ الوسيطة، وعندما تقوم بترجمة القيمة الإرجاع أو معلمة إخراج من استدعاء أسلوب.NET.
إلى تمرير القيمة خالية إلى أسلوب.NET، استخدم فقط nullكلمة أساسية في استدعاء تعليمات برمجية. The following تعليمات برمجية مثال illustrates this.
open System
// Pass a null value to a .NET method.
let ParseDateTime (str: string) =
let (success, res) = DateTime.TryParse(str, null, System.Globalization.DateTimeStyles.AssumeUniversal)
if success then
Some(res)
else
None
لترجمة القيمة خالية القيمة هو تم الحصول عليها من أسلوب.NET، استخدام مطابقة النقش إذا كان ذلك ممكناً. يظهر المثال التعليمات البرمجية التالي كيفية استخدام نموذج مطابقة لترجمة القيمة خالية في القيمة هو التي يتم إرجاعها من ReadLineعند محاولة القراءة بعد إنهاء على دفق إدخال.
// Open a file and create a stream reader.
let fileStream1 =
try
System.IO.File.OpenRead("TextFile1.txt")
with
| :? System.IO.FileNotFoundException -> printfn "Error: TextFile1.txt not found."; exit(1)
let streamReader = new System.IO.StreamReader(fileStream1)
// ProcessNextLine returns false when there is no more input;
// it returns true when there is more input.
let ProcessNextLine nextLine =
match nextLine with
| null -> false
| inputString ->
match ParseDateTime inputString with
| Some(date) -> printfn "%s" (date.ToLocalTime().ToString())
| None -> printfn "Failed to parse the input."
true
// A null value returned from .NET method ReadLine when there is
// no more input.
while ProcessNextLine (streamReader.ReadLine()) do ()
يمكن أيضا إنشاء قيمة فارغة لأنواع F# بطرق غير ذلك، مثل كـ عند استخدام Array.zeroCreate، أي استدعاءات Unchecked.defaultof. يجب أن تكون حذراً مع تعليمات برمجية مثل إلى الاحتفاظ بقيم خالية تغليفها. في مكتبة بغرض فقط ب #، لم يكن إلى البحث عن قيم الخالية في كل دالة. في حالة الكتابة مكتبة ل interoperation مع لغات.NET الأخرى، قد تحتاج إلى إضافة عمليات فحص null معلمات إدخال ويقوم بطرح ArgumentNullException، تماما كما تفعل في C# أو Visual Basicتعليمات برمجية.
يمكنك استخدام التعليمة البرمجية التالية للتحقق من حالة القيمة عشوائية هو خالية.
[F#]
match box value with
| null -> printf "The value is null."
| _ -> printf "The value is not null."