بررسی آرایه در یک رشته با اکستنشن متد ContainsAny در VB.net

اگر قبلاً با متد Contains کارکرده باشید میدانید که یک string از شما به‌عنوان پارامتر ورودی دریافت می‌کند و سپس رشته موردنظرتان را بررسی می‌کند که این در آن موجود است یا خیر. حال اگر نیاز به بررسی آرایه در یک رشته را داشته باشیم باید چه کنیم؟ چاره کار استفاده از اکستنشن متد است.

اکستنشن متد

بررسی آرایه در یک رشته با اکستنشن متد ContainsAny

فرض کنید سناریو ما این‌چنین است که قرار به آپلود فایلی هستیم و نیاز است قبل از بارگذاری آن در سرور چک کنیم که آیا پسوند آن از نظر ما مجاز است یا خیر. در این صورت نیاز است که ابتدا پسوندهای مجاز را در تابع ContainsAny معرفی کنیم. همان‌طور که گفته شد این تابع به‌صورت پیش‌فرض در متدهای دات نت نیست و ما خودمان آن را ابتدا به‌صورت دستی می‌سازیم.

  1. ابتدا ایمپورت های لازم را فراخوانی می‌کنیم.
  2. سپس یک ماژول ایجاد می‌کنیم.
  3. اگر از زبان سی شارپ استفاده می‌کنید باید یک class ایجاد کنید.

 

Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices
Imports System.Globalization
Imports System.Dynamic
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Public Module myExtention

 

ساخت اکستنشن متد

  • ابتدا تگ Extension را بالای فانکشن اضافه می‌کنیم تا در هنگام کد نویسی به‌صورت متد inline ظاهر گردد.
  • پارامترهای داخل فانکشن یکی از نوع String است و دیگری آرایه‌ای از string ها.
  • سپس یک حلقه تشکیل داده و تک‌به‌تک عناصر را مورد آزمایش قرار می‌دهد.
  • به ‌محض آنکه یکی از مقادیر جواب True به ما بدهد از حلقه خارج می‌شود.
  • اما درصورتی‌که اتفاق نیفتد مقدار بازگشتی False است.

 

    <Extension()>
    Public Function ContainsAny(ByVal haystack As String, ParamArray needles As String()) As Boolean
        For Each i In needles
            If i.Contains(haystack) Then
                Return True
            End If
        Next
        Return False
    End Function

 

کاربرد اکستنشن متد

حال به مثال زیر توجه کنید. در این مثال که مربوط به آپلود فایل است ایتدا پسوند فایل مورد شناسایی قرار گرفته و سپس با همین متد بررسی شده که ایا این پسوند از نظر ما مجاز به انتقال به سرور است یا خیر. سپس در ادامه محدودیت حجم آپلود را بر حسب MB بررسی شده و در اخر با دادن مسیر نهایی آپلود فایل محل ذخیره نهایی آن مشخص شده است.

 

        <HttpPost>
        <ValidateAntiForgeryToken>
        Function myupload(files As IEnumerable(Of HttpPostedFileBase)) As ActionResult
            Try
                If (Not (files) Is Nothing) Then
                    For Each u In files
                        ' Verify that the user selected a file
                        If ((Not u Is Nothing) _
                                AndAlso (u.ContentLength > 0)) Then
                            '۱- Get and Check File Extention
                            If Path.GetExtension(u.FileName).
                            ContainsAny(".jpeg", ".jpg", ".png", ".gif",
                                        ".mp4", ".mp3", ".wma", ".wav",
                                        ".۷z", ".zip", ".rar", ".csv",
                                        ".xlsx", ".xls", ".doc", ".docx",
                                        ".txt", ".pdf", ".pptx") = False Then
                                Return msgR.Noty("پسوند فایل غیر قابل قبول است.", "success", "bottom right")
                                Exit For
                                Exit Function
                            ElseIf (u.ContentLength / 1024 / 1024) > 512 Then
                                Return msgR.Noty("حداکثر حجم فایل ۵۱۲ MB است.", "success", "bottom right")
                                Exit For
                                Exit Function
                            End If
                            ' extract only the fielname
                            Dim fileName = Path.GetFileName(u.FileName)
                            '۵- Check File Exist And if (True) Generate new name
                            While (System.IO.File.Exists(Server.MapPath(current_path) & "\\" & fileName))
                                fileName = Path.GetFileNameWithoutExtension(u.FileName) + "_" + Date.Now.Second.ToString + Path.GetExtension(u.FileName)
                            End While
                            ' TODO: need to define destination
                            Dim pathh = Server.MapPath(current_path) + "\" + fileName
                            u.SaveAs(pathh)
                        End If
                    Next
                End If
            Catch ex As Exception
            End Try
            Return msgR.Noty("اپلود انجام شد", "success", "bottom right")
        End Function


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *