كيف يجب أن ألقي في VB.NET؟
سؤال
هل كل هذه متساوية؟تحت أي ظروف يجب أن أختار كل منهما على الآخر؟
فار.ToString()
CStr(فار)
CType (فار، سلسلة)
DirectCast (فار، سلسلة)
يحرر:اقتراح من لا نفسي…
- تريكاست (فار، سلسلة)
المحلول
هذه كلها مختلفة قليلاً، ولها استخدام مقبول بشكل عام.
var.
ToString
()
سيعطيك تمثيل السلسلة للكائن، بغض النظر عن نوعه.استخدم هذا إذاvar
ليست سلسلة بالفعل.CStr
(var)
هو مشغل سلسلة VB.أنا لست من مستخدمي VB، لذا أقترح تجنب ذلك، لكنه لن يؤذي أي شيء حقًا.أعتقد أنه في الأساس نفسCType
.CType
(var, String)
سيقوم بتحويل النوع المحدد إلى سلسلة، باستخدام أي عوامل تحويل متوفرة.DirectCast
(var, String)
يتم استخدامه لتحويل كائن إلى سلسلة.إذا كنت تعلم أن متغير الكائن هو في الواقع سلسلة، فاستخدم هذا.هذا هو نفس(string)var
شركة#.TryCast
(كما ذكر @لا نفسي) يشبهDirectCast
, ، لكنه سيعودNothing
إذا كان لا يمكن تحويل المتغير إلى سلسلة، بدلاً من طرح استثناء.هذا هو نفسvar as string
شركة#.الTryCast
تتمتع الصفحة على MSDN بمقارنة جيدة أيضًا.
نصائح أخرى
Cstr()
يتم تجميعها مضمنة للحصول على أداء أفضل.
CType
يسمح بالإلقاء بين الأنواع إذا تم تعريف عامل التحويل
ToString()
بين النوع الأساسي والسلسلة، يُطرح استثناءً إذا كان التحويل غير ممكن.
TryParse()
من السلسلة إلى القاعدة typeif
ممكن خلاف ذلك يعود كاذبة
DirectCast
يتم استخدامه إذا كانت الأنواع مرتبطة عن طريق الميراث أو تشترك في واجهة مشتركة، وسيتم طرح استثناء إذا لم يكن الإرسال ممكنًا، trycast
لن يعود شيئا في هذه الحالة
أفضّل بناء الجملة التالي:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
ههه يمكنك أن تقول أنني عادة أكتب التعليمات البرمجية في C#.8)
السبب الذي يجعلني أفضّل TryCast هو أنك لست مضطرًا إلى العبث بالعبء الزائد لاستثناءات الإرسال.ينجح طاقم الممثلين الخاص بك أو تتم تهيئة المتغير الخاص بك ليصبح خاليًا وتتعامل مع ذلك وفقًا لذلك.
MSDN يبدو أنه يشير إلى أن قوالب Cxxx لأنواع معينة يمكنها تحسين الأداء في VB .NET لأنه يتم تحويلها إلى تعليمات برمجية مضمنة.لسبب ما، يقترح أيضًا البث المباشر على عكس CType في حالات معينة (تشير الوثائق إلى أنه عندما تكون هناك علاقة ميراث؛أعتقد أن هذا يعني أنه يتم التحقق من سلامة طاقم الممثلين في وقت الترجمة ويمكن تطبيق التحسينات بينما يستخدم CType دائمًا وقت تشغيل VB.)
عندما أكتب كود VB .NET، فإن ما أستخدمه يعتمد على ما أفعله.إذا كان رمزًا أوليًا سأتخلص منه، سأستخدم كل ما يحدث لي في الكتابة.إذا كان الأمر يتعلق بالرمز الذي أنا جاد بشأنه، فإنني أحاول استخدام طاقم عمل Cxxx.إذا لم يكن هناك أحد، أستخدم DirectCast إذا كان لدي اعتقاد معقول بوجود علاقة ميراث.إذا لم يكن لدي أي فكرة عما إذا كان يجب أن ينجح الإرسال (إدخال المستخدم -> الأعداد الصحيحة، على سبيل المثال)، فأنا أستخدم TryCast للقيام بشيء أكثر ودية من طرح استثناء على المستخدم.
الشيء الوحيد الذي لا أستطيع التخلص منه هو أنني أميل إلى استخدام ToString بدلاً من CStr ولكن من المفترض أن Cstr أسرع.
وفقًا لامتحان الشهادة، يجب عليك استخدام Convert.ToXXX() كلما أمكن ذلك للتحويلات البسيطة لأنه يعمل على تحسين الأداء بشكل أفضل من تحويلات CXXX.
في وقت ما، أتذكر رؤية حالة مكتبة MSDN لاستخدام CStr() لأنها كانت أسرع.لا أعرف إذا كان هذا صحيحا بالرغم من ذلك.