Функция которая объединяет три строки в одну

130
02 августа 2019, 04:40

Я написал функцию, которая объединяет три строки в одну, но я только учу C# поэтому ничего не вышло. Подскажите, почему мой код не работает:

namespace ConsoleApplicationTest1
{
   class Program
   {
      string Сoncatenation(string str1, string str2, string str3)
      {
         str1 += str2;
         str1 += str3;
         return str1;
     }
     static void Main(string[] args)
     {
        string st1 = "Vova Na";
        string st2 = "ik bb";
        string st3 = "gdsadsds";
        string correct = Сoncatenation(st1, st2, st3);
        System.Console.WriteLine(correct);
    }
   }
}
Answer 1

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

Program program = new Program();
string correct = program.Сoncatenation(st1, st2, st3);

Но, скорее всего, вы не хотели бы так вызывать функцию, ну действительно, зачем ей экземпляр какого-то класса, если он по сути никак и ни на что не влияет и не используется? В таком случае вам следует сделать вашу функцию статической:

static string Сoncatenation(string str1, string str2, string str3)
{
    ...

Тогда ваш остальной код заработает без изменений.

Ну и, после того как натренируетесь с написанием собственных функций и прочего, вам следует изучить стандартную библиотеку, т. к. многие вещи уже в ней имеются, в частности функция для конкатенации нескольких строк (public static string Concat (params string[] values)).

Хороший экскурс по стандартной библиотеке вы найдете в книге Албахари (см. здесь), ну и не стоит забывать про MSDN.

Answer 2

Можно использовать ключевое слово params.

public static string Сoncatenation(params string[] str)
{
    return string.Join("", str);
}
Answer 3

Зачем изобретать велосипед если C# содержит это из коробки?

Есть функция String.Concat, которая на вход может принять до 4 элементов, а благодаря перегрузки с IEnumerable может принимать произвольное кол-во строк, которые предварительно упакованы в коллекцию.

Фреймворк на то и фреймворк, что содержит готовые блоки, которые можно задействовать сэкономив время на собственной реализации.

Должно быть особое обоснования того, почему вам требуется сделать то, что уже реализовано по другому.

Если вы все таки хотите докопаться до истины, например в учебных целях, почему ваш код не работает, то проблема в том, что вы создаете экземплярный метод, который не может так просто быть вызван. Поэтому перед этим вы должны создать объект типа Program через new, а уже у этой переменной вызвать вашу функцию.

Есть и другой вариант: Если вы объявите ее с модификатором static, то ваш код будет работать без изменений без необходимости создавать экземпляр.

READ ALSO
Оптимизации сортировки массива

Оптимизации сортировки массива

У меня есть два цикла "for"Когда записей ~100 они работают быстро, но когда записей больше 100000 скорость обработки может быть и час

217
Удаление связанных данных Entity Framework

Удаление связанных данных Entity Framework

Есть связанные классы:

159
В c# определить переменную условной компиляции в другом проекте

В c# определить переменную условной компиляции в другом проекте

Можно ли в c#, visualstudio определить переменную условной компиляции в другом проекте?

152
Бинарная сериализация

Бинарная сериализация

Мне необходимо была бинарная сериализация в один файл, предположим, datadat

203