سؤال

تافهة أعرف، ولكن مهتم فقط

لدي متغير Stringbuilder، وأريد إرجاع محتويات، ولكن إذا كان فارغا، أريد العودة "|"، فهل من الأفضل استخدام StringBuilder.tostring في بيان مقارنة على سبيل المثال

   If lReturnStringBuilder.ToString = String.Empty Then
                lReturnStringBuilder.Append("|")
            End If
return lreturnStringBuilder.tostring

أو هل من الأفضل تحويله إلى سلسلة، ومقارنة ذلك، على الرغم من أن هذا يعني تحميل متغير جديد ومساحة سلسلة تخصيص لذلك على سبيل المثال

Dim lString as string = lReturnStringBuilder.ToString
if lString = string.empty then
      lstring = "|"
end if
return lString
هل كانت مفيدة؟

المحلول

هذا هو نوع التحسين الصغير الذي لا داعي للقلق. ومع ذلك، سأقوم بنشر ما أعتقد أنه أكثر طريقة أناقة (وفعالة) للقيام بذلك على أي حال:

Dim result = If(lReturnString.Length = 0, "|", lReturnString.ToString())

هذا يحفظ تحويل StringBuilder فارغة إلى سلسلة غير ضرورية (أو بعد ذلك استدعاء إلحاق، وهو بالتأكيد غير مطلوب). لاحظ استخدام Inline إذا كان العبارة (VB 9.0)، الذي يفعل ليس قم بتقييم كلا البيانين في أي حالة واحدة، كما هو بناء لغة وليس وظيفة (أي ما يعادل بالضبط في حالة عادية إذا تم تعيينات متغيرة).

نصائح أخرى

أنت تخصيص "مساحة السلسلة" بغض النظر عن ما تفعله. تمنحك وظيفة Tostring سلسلة، سواء قمت بتعيين القيمة إلى متغير أم لا. لذلك أود أن أقترح أنك ستكون أفضل إيقاف تشغيل قيمة ToString () بمتغير ثم اختبار تلك القيمة المتغيرة للحصول على سلسلة فارغة. شيء من هذا القبيل (آسف، أنا رجل C #، ولكن نأمل أن يعمل هذا في VB):

Dim returnVal as String
returnVal = lReturnString.ToString()
If String.IsNullOrEmpty(returnVal) Then
  returnVal = "|"
End If

يجب عليك تجنب استدعاء Tostring على StringBuilder ثم إلحاق المزيد به. عند استدعاء طريقة Tostring، يمكنك الحصول على السلسلة التي تم استخدامها داخليا بواسطة StringBuilder. إذا قمت بإلحاق المزيد إلى StringBuilder، فعليه تخصيص سلسلة جديدة.

ما عليك سوى استخدام خاصية الطول للتحقق مما إذا كان StringBuilder فارغا، وإذا لم يكن لديك إشراك StringBuilder لإنشاء النتيجة.

If lReturnStringBuilder.Length = 0 Then
   Return "|"
Else
   Return lReturnStringBuilder.ToString()
End If

يمكنك استخدام طول خاصية كائن Stringbuilder الخاص بك. بهذه الطريقة يمكنك تجنب استدعاء Tostring () في المرة الأولى:

If lReturnStringBuilder.Length = 0 Then
   lReturnStringBuilder.Append("|")
End If

Return lReturnStringBuilder.ToString()

أو

If lReturnStringBuilder.Length = 0 Then
   Return "|"
End If

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