Я работаю над школьным заданием, и мне нужно использовать метод расширения, чтобы найти строку, содержащую специальные символы, такие как '!', '@', '#', '$', '%', '^', '&', '*'.
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
, но я не знаю, как это сделать.
В качестве примечания: вам следует стараться писать свой код так, чтобы он имел смысл (вместо того, чтобы писать код, который работает просто волшебным образом). Если у вас есть имя метода IsAllowedID
и этот метод возвращает true
, это должно указывать на то, что ваш идентификатор действительно разрешен (а не наоборот).
Спасибо всем за ответы. Много вещей, которые нужно понять; Я прочитаю и посмотрю руководство, книги и конспект еще раз.
Статические классы расширения в 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 проблемы:
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.");
}
}
}
}
Обратите внимание: вам следует включить using System.Linq;
, чтобы использовать метод проверки наличия char
в строке (метод String.Contains
без него поддерживает только строку).
Примечание: IsAllowedID
следует либо назвать как-то вроде IsNotAllowedID
, либо отменить возврат true
/false
, потому что в данный момент он возвращает противоположность тому, действителен ли идентификатор.
Огромное спасибо за помощь и еще больше за живую демонстрацию! а также ссылку на руководство! :)
Я поставил галочку, но не могу проголосовать из-за отсутствия репутации. Мне жаль!
Здесь такие правила, не нужно извиняться, @Youngson.
Вы читали руководство по программированию методов расширения ?