سؤال

وأنا أجد نفسي في كثير من الأحيان الحاجة إلى استخدام 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top