Как реализовать метод расширения, чтобы проверить, содержит ли строка специальные символы, такие как !, @ и т. д. в C#

Я работаю над школьным заданием, и мне нужно использовать метод расширения, чтобы найти строку, содержащую специальные символы, такие как '!', '@', '#', '$', '%', '^', '&', '*'.

namespace ExtensionMethodAssignment
{

        public class CheckID
        {
            public bool IsAllowedID(string id)
            {
                string specialChar = @"!@#$%^&*";
                foreach (var identification in specialChar)
                {
                    if (id.Contains(identification)) return true;
                }
                return false;
            }

        }


        static void Main(string[] args)
        {
            Console.WriteLine("Type your ID : ");
            string id = Console.ReadLine();
            
            if (id.IsAllowedID() == true)
            {
                Console.WriteLine("ID is not allowed. \n !, @, #, $, %, ^, &, and * are not allowed.");
            }
            else
            {
                Console.WriteLine($"{id} is allowed.");
            }
        }

    }
}

Я написал код выше, но не знаю, как использовать его в качестве метода расширения.
Думаю, это похоже на создание простого пустого имени метода IsAllowedID, а затем добавление метода Main, но я не знаю, как это сделать.

Вы читали руководство по программированию методов расширения ?

JonasH 29.07.2024 08:19

В качестве примечания: вам следует стараться писать свой код так, чтобы он имел смысл (вместо того, чтобы писать код, который работает просто волшебным образом). Если у вас есть имя метода IsAllowedID и этот метод возвращает true, это должно указывать на то, что ваш идентификатор действительно разрешен (а не наоборот).

grek40 29.07.2024 09:03

Спасибо всем за ответы. Много вещей, которые нужно понять; Я прочитаю и посмотрю руководство, книги и конспект еще раз.

Youngson 30.07.2024 08:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
105
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Статические классы расширения в C# можно использовать следующим образом:


public static class IdentityExtension
{
    private static Regex ValidationRegex = new Regex("[!@#$%^&*]");

    public static bool IsIdValid(this string id)
    {
        return !ValidationRegex.IsMatch(id);
    }
}

Поскольку метод «IsIdValid» принимает строку с ключевым словом «this», этот метод является расширением и может использоваться следующим образом:

var fooId = "!fooId";
Console.WriteLine(fooId.IsIdValid());

В этом сценарии вывод будет ложным, поскольку «fooId» имеет '!' как элемент.

Ответ принят как подходящий

В реализации метода расширения есть 3 проблемы:

  1. Методы расширения должны находиться в необобщенном статическом классе.
  2. Методы расширения сами по себе должны быть статическими.
  3. Параметр string id должен иметь префикс ключевого слова this.

Вы можете увидеть это в документации по методам расширения .

Исправленная версия:

using System;
using System.Linq;

namespace ExtensionMethodAssignment
{
    //-----vvvvvv--------------
    public static class CheckID  // The class is static
    {
        //-----vvvvvv------------------vvvv-----------
        public static bool IsAllowedID(this string id)  // The method is static and the parameter is prefixed with `this`
        {
            string specialChar = @"!@#$%^&*";
            foreach (var identification in specialChar)
            {
                if (id.Contains(identification)) return true;
            }
            return false;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Type your ID : ");
            string id = Console.ReadLine();

            if (id.IsAllowedID() == true)
            {
                Console.WriteLine("ID is not allowed. \n !, @, #, $, %, ^, &, and * are not allowed.");
            }
            else
            {
                Console.WriteLine($"{id} is allowed.");
            }
        }
    }
}

Live demo

Обратите внимание: вам следует включить using System.Linq;, чтобы использовать метод проверки наличия char в строке (метод String.Contains без него поддерживает только строку).

Примечание:
IsAllowedID следует либо назвать как-то вроде IsNotAllowedID, либо отменить возврат true/false, потому что в данный момент он возвращает противоположность тому, действителен ли идентификатор.

Огромное спасибо за помощь и еще больше за живую демонстрацию! а также ссылку на руководство! :)

Youngson 30.07.2024 08:54

Я поставил галочку, но не могу проголосовать из-за отсутствия репутации. Мне жаль!

Youngson 30.07.2024 09:10

Здесь такие правила, не нужно извиняться, @Youngson.

wohlstad 30.07.2024 09:30

Другие вопросы по теме