Стрічка 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 замість And .

Розглянемо цей приклад:

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

Це виливає виняток, оскільки extension - це ніщо інше, крім Or , в будь-якому випадку викликає оцінку другої умови. Це безпечно:

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
додано

@ Тим Шмельтер вже досить добре відгукнувся на це, але: -

Простою альтернативою є твердження 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, джерело
Я думаю, що downvote було те, що ви використовуєте Or замість 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# Або перекладається на |. Орелс переконається, що друга частина не оцінюється, якщо перша частина вже є істиною.
додано Автор Joris Van Regemortel, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug