Я написал функцию, которая объединяет три строки в одну, но я только учу 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);
}
}
}
Ваша функция работает так как вы запланировали, проблема в другом: для того чтобы вызвать экземплярный (т. е. нестатический) метод, необходимо этот самый экземпляр указать. Т. к. ваша функция находится в классе 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.
Можно использовать ключевое слово params.
public static string Сoncatenation(params string[] str)
{
return string.Join("", str);
}
Зачем изобретать велосипед если C# содержит это из коробки?
Есть функция String.Concat
, которая на вход может принять до 4 элементов, а благодаря перегрузки с IEnumerable
может принимать произвольное кол-во строк, которые предварительно упакованы в коллекцию.
Фреймворк на то и фреймворк, что содержит готовые блоки, которые можно задействовать сэкономив время на собственной реализации.
Должно быть особое обоснования того, почему вам требуется сделать то, что уже реализовано по другому.
Если вы все таки хотите докопаться до истины, например в учебных целях, почему ваш код не работает, то проблема в том, что вы создаете экземплярный метод, который не может так просто быть вызван. Поэтому перед этим вы должны создать объект типа Program
через new
, а уже у этой переменной вызвать вашу функцию.
Есть и другой вариант: Если вы объявите ее с модификатором static
, то ваш код будет работать без изменений без необходимости создавать экземпляр.
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть два цикла "for"Когда записей ~100 они работают быстро, но когда записей больше 100000 скорость обработки может быть и час
Можно ли в c#, visualstudio определить переменную условной компиляции в другом проекте?
Мне необходимо была бинарная сериализация в один файл, предположим, datadat