Integer.TryParse - طريقة أفضل؟
سؤال
وأنا أجد نفسي في كثير من الأحيان الحاجة إلى استخدام Integer.TryParse لمعرفة ما إذا كانت قيمة عدد صحيح. ومع ذلك، عند استخدام TryParse، لديك لتمرير متغير إشارة إلى وظيفة، لذلك أجد نفسي دائما الحاجة إلى إنشاء عدد صحيح فارغ لتمرير في وعادة ما تبدو شيئا مثل:
Dim tempInt as Integer
If Integer.TryParse(myInt, tempInt) Then
وأجد أن تكون مرهقة جدا بالنظر إلى أن كل ما أريده هو صواب / خطأ استجابة بسيطة. هل هناك طريقة أفضل لهذا النهج؟ لماذا لا يوجد وظيفة فوق طاقتها أين يمكنني فقط تمرير قيمة أريد لاختبار والحصول على استجابة صح / خطأ؟
المحلول
لا حاجة للإعلان عن عدد صحيح.
If Integer.TryParse(intToCheck, 0) Then
أو
If Integer.TryParse(intToCheck, Nothing) Then
إذا كان لديك صافي 3.5 القدرة يمكنك إنشاء طريقة التمديد لسلاسل.
Public Module MyExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function IsInteger(ByVal value As String) As Boolean
If String.IsNullOrEmpty(value) Then
Return False
Else
Return Integer.TryParse(value, Nothing)
End If
End Function
End Module
وثم استدعاء مثل:
If value.IsInteger() Then
عذرا، الاسترسال وأنا أعلم، ولكن أيضا يمكنك إضافة هذا إلى فئة MyExtensions أعلاه في صافي 3.5 و لا تقلق إلا إذا كنت بحاجة التصديقات.
<System.Runtime.CompilerServices.Extension()> _
Public Function ToInteger(ByVal value As String) As Integer
If value.IsInteger() Then
Return Integer.Parse(value)
Else
Return 0
End If
End Function
وثم ببساطة استخدام
value.ToInteger()
وهذا سيعود 0 إذا كان ليس عدد صحيح صالح.
نصائح أخرى
ومنذ كنت تستخدم VB.net يمكنك استخدام وظيفة IsNumeric
If IsNumeric(myInt) Then
'Do Suff here
End If
public static class Util {
public static Int32? ParseInt32(this string text) {
Int32 result;
if(!Int32.TryParse(text, out result))
return null;
return result;
}
public static bool IsParseInt32(this string text) {
return text.ParseInt32() != null;
}
}
وحاول هذا الرمز.
Module IntegerHelpers
Function IsInteger(ByVal p1 as String) as Boolean
Dim unused as Integer = 0
return Integer.TryParse(p1,unused)
End Function
End Module
والجزء الجميل هو أنه منذ أن أعلن بوصفها وظيفة على مستوى وحدة يمكن استخدامه دون تصفيات. مثال للاستخدام
return IsInteger(mInt)
لماذا لا تكتب لطريقة تمديد لتنظيف الشفرة؟ أنا لم أكتب VB.Net لفترة من الوقت، ولكن هنا هو مثال في ج #:
public static class MyIntExtensionClass
{
public static bool IsInteger(this string value)
{
if(string.IsNullOrEmpty(value))
return false;
int dummy;
return int.TryParse(value, dummy);
}
}
J أمبروز ليتل تنفيذ <وأ href = "http://aspalliance.com/80_Benchmarking_IsNumeric_Options.all" يختلط = "نوفولو noreferrer"> اختبارات توقيت IsNumeric يتحقق في عام 2003 . قد ترغب في إعادة المحاولة الاختبارات المذكورة مع V2 من CLR.
وهناك تباين ستكون كما يلي:
Int32.TryParse(input_string, Globalization.NumberStyles.Integer)