Ericko254 Ответов: 2

Как построить GUI stringbuilder?


Реализуйте метод расширения для класса StringBuilder для подсчета количества слов, содержащихся в объекте StringBuilder. Например, если объект StringBuilder sb=”This is to test whether the extension method count can return a right answer or not”, то количество слов, содержащихся в sb, равно 16.
Напишите графическое приложение, которое позволит пользователю вводить в предложение нужное ему количество слов. С помощью StringBuilder создайте предложение с заданным количеством слов. Слова в предложении имеют случайные символы ASCII. Количество символов в каждом слове-это случайное число от 1 до 20

Что я уже пробовал:

public class StringBuilderExtension
{
    public static int extension(StringBuilder sb)
    {
        return sb.ToString().Split(' ').Length;
    }
    
    public static void Main(string[] args)
    {
        StringBuilder sb =
            new StringBuilder("This is to test whether the extension method count can return a right answer or not");
        Console.WriteLine("Number of words in " + sb + " is " + extension(sb));
    }
}

2 Ответов

Рейтинг:
4

#realJSOP

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

Как реализовать и вызвать пользовательский метод расширения - руководство по программированию на C# | Microsoft Docs[^]

Если вам нужно больше, попробуйте это: DuckDuckGo search - методы расширения c# [^]


Maciej Los

5ed!

Ericko254

спасибо

Рейтинг:
13

OriginalGriff

Во - первых, чтобы создать метод расширения, ему нужны две вещи:
1) содержаться в static класс. Ваш содержащий класс не является таковым static, так что вы получите ошибку:

public class StringBuilderExtension
{
...

2) чтобы расширить класс, вам нужно использовать this ключевое слово для первого параметра в определении метода:
public static int WordCount(this StringBuilder sb)
    {
    return sb.ToString().Split(' ').Length;
    }


Tio использует его, вы относитесь к нему как к любому из "встроенных" методов класса и вызываете его на экземпляре класса, а не передаете ему экземпляр в качестве параметра (хотя это будет работать с классом расширений, это плохая идея):
StringBuilder sb = new StringBuilder("Hello world");
Console.WriteLine(sb.WordCount());

Кроме того, он должен иметь "разумное" имя - такое, которое говорит пользователю, что он делает, а не общее имя, такое как "расширение".

Сложите их вместе, и это должно сработать:
public static class StringBuilderExtensions
    {
    public static int WordCount(this StringBuilder sb)
        {
        return sb.ToString().Split(' ').Length;
        }

    public static void Main(string[] args)
        {
        StringBuilder sb = new StringBuilder("This is to test whether the extension method count can return a right answer or not");
        Console.WriteLine("Number of words in \"" + sb + "\" is " + sb.WordCount());
        }
    }


Richard MacCutchan

Я думаю, что это еще два кредита к твоей степени. :)

Ericko254

Спасибо.

Richard MacCutchan

Не для вас, вы просто потерпели неудачу, не выполнив свою собственную работу.

OriginalGriff

Было бы три, если бы я искал код у Гоггла ... :вздыхать: