سؤال

هل كل هذه متساوية؟تحت أي ظروف يجب أن أختار كل منهما على الآخر؟

  • فار.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() لأنها كانت أسرع.لا أعرف إذا كان هذا صحيحا بالرغم من ذلك.

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