إرجاع محتويات stringbuilder.
-
05-09-2019 - |
سؤال
تافهة أعرف، ولكن مهتم فقط
لدي متغير 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()