VB.NET жолы «.abc» немесе «.xyz» басқа

Басқа екі жолды қалай тексеремін ... (мысалдың кодын қараңыз)

Imports System.IO
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Input path.
        Dim p As String = TextBox1.Text
        ' Get extension.
        Dim extension As String = Path.GetExtension(p)

        If extension = ".abc" Or ".xyz" Then
            'nothing
            Label1.Text = "file type suported"
        Else
            Label1.Text = "Unsuported file type"
        End If
    End Sub
End Class
1
неге коммутатормен жұмыс істемейді?
қосылды автор Sora, көзі
extension = «.abc» немесе кеңейтім = «.xyz»
қосылды автор Preet Sangha, көзі

6 жауаптар

Шартты қосыңыз:

If extension = ".abc" OrElse extension = ".xyz" Then
    'nothing
        Label1.Text = "file type suported"
Else
    Label1.Text = "Unsuported file type"
End If

Мен OrElse қолдандым, себебі бұл бірінші жағдайда жалғанды ​​қайтарса ғана екінші шартты тексереді. Сол себепті сіз және орнына AndAlso пайдалануыңыз керек.

Мына мысалды қарастырайық:

Dim extension As String = Nothing
If extension Is Nothing Or extension.ToLower() = ".abc"
' ...

Бұл кеңейтімі немесе дегенді білдірмейді, себебі екінші жағдайды бәрібір бағалайды. Бұл қауіпсіз:

If extension Is Nothing OrElse extension.ToLower() = ".abc"

немесе OrElse-ға қарсы

Тағы бір көзқарас - оң тізім мен Enumerable.Contains пайдалану:

Dim allowedExtensions = { ".abc", ".xyz" }
If allowedExtensions.Contains(extension) Then
    ' ...
4
қосылды

Қолдау көрсетілетін кеңейтімдерді жолға қоюға болады

Dim ValidExtensions As String = ".abc.xyz"

Содан кейін

If ValidExtensions.Contains(extension) Содан кейін
        Label1.Text = "file type suported"
Else
    Label1.Text = "Unsuported file type"
End If   

Осылайша, қанша кеңейтілімді қолдайтыныңыз немесе тізімге қандай өзгерістер жасағаныңыз маңызды емес, кодтың негізгі жолын өзгертуге болады.

Сондай-ақ, егер сіз пайдаланушыны қолдайтын файл түрлерін өзгертуге рұқсат берсеңіз, жолда төмендегі өзгертулерді жүйелі түрде жасай аласыз.

2
қосылды

@Tim Schmelter бұған өте мұқият жауап берді, бірақ: -

Қарапайым балама - бұл Select операторы - болашақта басқа файл түрін қолдайтын болсаңыз, бұл кодты жаңартуды жеңілдетеді:

Dim extension As String = Path.GetExtension(p)
Select Case extension
Case ".abc", ".xyz"
    Label1.Text = "file type suported"
Case Else
    Label1.Text = "unsupported file type"
End Select
1
қосылды
Мен тіпті рұқсат етілген кеңейтімдер тізімін теңшелім файлындағы (үтірмен бөлектелген немесе солай) сақтап қоясыз, сондықтан сіз оны қосқан сайын қайтадан қайта-қайта қайта-қайта орындаудың қажеті жоқ.
қосылды автор Joris Van Regemortel, көзі

Тырысу:

If extension = ".abc" Or extension = ".xyz" Then
0
қосылды
неге төмен дауыспен мен plz enplane түсінбеймін :(
қосылды автор Shree, көзі
OrElse орнына Немесе қолданып жатқаныңыз үшін, төмендеңіз деп ойлаймын.
қосылды автор Jason Larke, көзі
Downvote? Бұл қатал.
қосылды автор Joris Van Regemortel, көзі

Store all the supported extensions in a HashSet structure and use the Contains method to check whether a specified extension is supported or not.

Imports System.IO
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim supportedExtensions As New System.Collections.Generic.HashSet(Of String)
        supportedExtensions.Add(".abc")
        supportedExtensions.Add(".xyz")

        ' Input path.
        Dim p As String = TextBox1.Text
        ' Get extension.
        Dim extension As String = Path.GetExtension(p)

        If (supportedExtensions.Contains(extension)) Then
            'nothing
            Label1.Text = "file type suported"
        Else
            Label1.Text = "Unsuported file type"
        End If
    End Sub
End Class

UPDATE: As the number of supported extensions is increased, the OR conditions needed for extension support checking would go up and this would affect the legibility and maintainability of your code. Consequently, this code snippet offers you more readability.

0
қосылды
Бұл жұмыс істейтініне қарамастан, ол If a Or b Then пайдалану арқылы ешқандай пайда көрмейді және қарапайым сұрақты жай ғана комплектейді
қосылды автор Matt Wilko, көзі
Мен сізбен келіспеймін. Өтінімде бірнеше OR шартына ие бола отырып, код оқылуын төмендетеді және ол «таза код» ретінде қаралмайды. Қолдау көрсетілетін кеңейтімдер 10-дан артса не болады? Өтініштегі 10 шарт немесе шартты оқиды ма? және жоғары күтімділігі бар ма?
қосылды автор Alireza Maddah, көзі

Сізге бір жолды өзгерту керек деп ойлаймын:

If extension = ".abc" Or extension = ".xyz" Then
0
қосылды
Өзіңіздің сөзіңізді алайық - VB.net-ны жасағаннан бері көп уақыт өтті. Дегенмен басты мәселе жоғалған айнымалы аты болды.
қосылды автор Dave Sexton, көзі
Орлеус әдетте Немесе қарағанда жақсы таңдау болып табылады
қосылды автор Joris Van Regemortel, көзі
Орелсе || дегенге ауысады C# ішінде. Немесе | аударады. Orelse бірінші бөлім шындық болғанда, екінші бөлік бағаланбағанына көз жеткізеді.
қосылды автор Joris Van Regemortel, көзі