Подскажите по сишарпу (возвращаемые значения методов)

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
Начал изучать, забегаю наперёд и возникают вопросы:
при объявлении метода мы указываем тип возвращаемого значения - либо void либо int (string и др), а если нам нужно вернуть массив, который содержит и строки и int-овые значения например, или в си-шарпе такой массив нельзя создать?
что запишется в переменную зеннолаба (в кубике си-свой код), если ретёрним массив (будет просто (1,2,3) ), можно ли потом его распарсить на переменные?
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Начал изучать, забегаю наперёд и возникают вопросы:
при объявлении метода мы указываем тип возвращаемого значения - либо void либо int (string и др), а если нам нужно вернуть массив, который содержит и строки и int-овые значения например, или в си-шарпе такой массив нельзя создать?
что запишется в переменную зеннолаба (в кубике си-свой код), если ретёрним массив (будет просто (1,2,3) ), можно ли потом его распарсить на переменные?
@arhip1985 а ты точно с самого начала начал изучать С# ? Или кусками изучаешь, что попадется?
 
  • Спасибо
Реакции: Oleg1987 и Dimionix

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
@arhip1985 а ты точно с самого начала начал изучать С# ? Или кусками изучаешь, что попадется?
да, сначала, до масивов ещё не дошёл, на методах остановился. но с массивами сталкивался в php, там не надо указывать тип данных, хранимый в массиве и можно записывать данные разных типов, тоже и с методами, никаких типов указывать не надо. вот у меня и сразу вопрос возник, когда до методов в сишарпе дошёл.
странная реакция, просто прошу помощи в понимании (в свободное от обучения времени)
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
странная реакция, просто прошу помощи в понимании (в свободное от обучения времени)
как можно просить помощи в понимании при полном непонимании изучаемого материала?
да, сначала, до масивов ещё не дошёл, на методах остановился. но с массивами сталкивался в php,
пхп таким же методом похоже изучал? Так как если бы знал пхп хорошо то в С# уже вопросов бы таких не задавал!
зы: Плохо когда не знал, да еще и забыл! )))
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
как можно просить помощи в понимании при полном непонимании изучаемого материала?

пхп таким же методом похоже изучал? Так как если бы знал пхп хорошо то в С# уже вопросов бы таких не задавал!
зы: Плохо когда не знал, да еще и забыл! )))
может действительно глупый вопрос, буду изучать дальше)
но неужели так сложно ответить по вопросу? ответить же тебе не тяжело было, мог бы и ответить исходя из твоего понимания вопроса, я же его и задаю, поскольку не понял чего-то)))
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
может действительно глупый вопрос, буду изучать дальше)
но неужели так сложно ответить по вопросу? ответить же тебе не тяжело было, мог бы и ответить исходя из твоего понимания вопроса, я же его и задаю, поскольку не понял чего-то)))
если честно я бы хотел ответить! Но учитывая тот факт, что я даже не понял твой вопрос, тем более, что я сам еще НУБ в С#, а также то, что ты сам не понимаешь, я просто боюсь ввести тебя в еще большее заблуждение, после которого у тебя вообще будет смесь кусков пхп и С# в голове.
зы: ты не подумай, я над тобой ни сколько не смеюсь, я просто спросил как ты изучаешь С# и понимаешь ты сам, что спрашиваешь?
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
если честно я бы хотел ответить! Но учитывая тот факт, что я даже не понял твой вопрос, тем более, что я сам еще НУБ в С#, а также то, что ты сам не понимаешь, я просто боюсь ввести тебя в еще большее заблуждение, после которого у тебя вообще будет смесь кусков пхп и С# в голове.
зы: ты не подумай, я над тобой ни сколько не смеюсь, я просто спросил как ты изучаешь С# и понимаешь ты сам, что спрашиваешь?
я понял про что спрашиваю. просто тот же самый массив данных в пхп POST или GET передаёт данные разных типов в одном массиве. а если мне в с# надо создать метод, который должен будет возвращать примерно такой же массив со значениями разных типов, то что делать? ведь с# строго типизированный язык, при объявлении массива или метода надо указать тип возвращаемого значения, и получается, что разнотипные данные, например строку и число нельзя заносить в массив или вернуть из метода, а в пхп можно любые типы заносить в массив. вот меня и озадачило подобное в сишарпе, какой выход из данного положения? я пока, на своём начальном этапе, вижу решение, что надо заносить в массив всё в виде типа строка (в тех случаях когда и числа и строки должны быть в одном массиве), а при извлечении делать явное преобразование типа x=(int) array[0] , того элемента, где должно быть число. может я что-то пока не так понимаю, но я и спрашиваю поэтому, понимал бы, то не спрашивал бы.
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
я понял про что спрашиваю. просто тот же самый массив данных в пхп POST или GET передаёт данные разных типов в одном массиве. а если мне в с# надо создать метод, который должен будет возвращать примерно такой же массив со значениями разных типов, то что делать? ведь с# строго типизированный язык, при объявлении массива или метода надо указать тип возвращаемого значения, и получается, что разнотипные данные, например строку и число нельзя заносить в массив или вернуть из метода, а в пхп можно любые типы заносить в массив. вот меня и озадачило подобное в сишарпе, какой выход из данного положения? я пока, на своём начальном этапе, вижу решение, что надо заносить в массив всё в виде типа строка (в тех случаях когда и числа и строки должны быть в одном массиве), а при извлечении делать явное преобразование типа x=(int) array[0] , того элемента, где должно быть число. может я что-то пока не так понимаю, но я и спрашиваю поэтому, понимал бы, то не спрашивал бы.
оооо видишь как внятно сразу расписал теперь я тебя понял, да и многие теперь тоже поймут! Вот это и нужно было в старттопике писать, а не ту билиберду)))
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Одно из основных правил c#: все типы наследуются от типа object. Отсюда следствия, что все типы можно неявно привести к типу object (операция boxing). А если можно привести к типу object, значит можно все вывести в массив типа object (object[]) и его возвращать, а потом производить операцию unboxing. Но обычно так не поступают, так как операция boxing очень дорогостоящая в плане ресурсов, поэтому код надо писать по-другому тебе.
Класс dictionary поддерживает тип <string, int>, но там всегда один ключ должен быть.
Есть неплохой вариант, через лист:

public struct Data
{
public Data(int intValue, string strValue)
{
IntegerData = intValue;
StringData = strValue;
}

public int IntegerData { get; private set; }
public string StringData { get; private set; }
}

var list = new List<Data>();

P.S. код не мой и мне лично не нравится использование листа, я бы использовал массив, если заранее известно количество объектов Data
 
Последнее редактирование:

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Одно из основных правил c#: все типы наследуются от типа object. Отсюда следствия, что все типы можно неявно привести к типу object (операция boxing). А если можно привести к типу object, значит можно все вывести в массив типа object (object[]) и его возвращать, а потом производить операцию unboxing. Но обычно так не поступают, так как операция boxing очень дорогостоящая в плане ресурсов, поэтому код надо писать по-другому тебе.
Класс dictionary поддерживает тип <string, int>, но там всегда один ключ должен быть.
что ты так глобально всегда расписываешь как буд то ты это писал и понимаешь сам о чём пишишь, не проще привести простой пример человеку что он попросил
и что кроме диктонари я не могу другим воспользоваться что бы загнать string int ??
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
что ты так глобально всегда расписываешь как буд то ты это писал и понимаешь сам о чём пишишь
это не копипаст, а написанный мною текст, тем более в каждом учебнике по 50 раз повторяется текст о наследовании от типа object
что ты так глобально всегда расписываешь как буд то ты это писал и понимаешь сам о чём пишишь, не проще привести простой пример человеку что он попросил
и что кроме диктонари я не могу другим воспользоваться что бы загнать string int ??
привел выше
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Ещё один момент есть, что при создании массива или листа объектов Data в приведенном выше коде сами объекты будут храниться не в стеке, а в куче (даже при типе Struct), следовательно выгоднее использовать static class Tuple (встроенный в c#) вот по такому формату (так как он тоже будет располагаться в куче и изобретать лишний велосипед не имеет смысла):
var myList = new List<Tuple<int, string>>();
myList.Add(Tuple.Create(1, "One"));
P.S.: но для большей производительности я все равно склоняюсь к использованию другого подхода к написанию кода
P.S.S: у зенки стоит обертка, которая возвращает всегда тип string, так что попытка вернуть массив или лист должна выдать ошибку.
 
Последнее редактирование:

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
не в стеке, а в куче
вы его этим хотите добить?)))
ТС, если просто массив(array), то возвращать можно только один тип... Ещё добавлю, в массив нельзя не добавлять элементы, не удалять элементы из него
 
Последнее редактирование:
  • Спасибо
Реакции: masterLomaster

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
вы его этим хотите добить?)))
ТС, если просто массив(array), то возвращать можно только один тип... Ещё добавлю, в массив нельзя не добавлять элементы, не удалять элементы из него
а разве добавлять нельзя, а - Array.add (array, int n) разве не добавляет элемент в конец массива?
или так -
int[] terms = new int[400];
for (int runs = 0; runs < 400; runs++)
{
terms[runs] = value;
}
 

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
В своём примере, ты индексируешь массив., Чтоб дописать или удалить элемент, необходимо данный массив переписать, тоесть при перезаписи массива ты удаляешь, или добавляешь новый элемент, но при этом создаётся новый, совершенно другой массив. Ну так ни кто не делает, ну или очень редко. Обычно используют коллекцию лист., на мой взгляд она самая удобная, кстати, там и будет работать метод add.
 
  • Спасибо
Реакции: masterLomaster и arhip1985

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
вы его этим хотите добить?)))
ТС, если просто массив(array), то возвращать можно только один тип... Ещё добавлю, в массив нельзя не добавлять элементы, не удалять элементы из него
Ну я привел 4 примера рабочего кода (dictionary <string, int>, object[], массив или лист пользовательских элементов типа Struct, массив или лист встроенных в c# элементов типа Tuple<T1, T2 ... Tn>)
А что выбирать, тут дело каждого. Я бы для производительности изобрел бы для себя велосипед из 2 массивов (1 массив типа string и 2 массив типа int) и записывал бы туда значения, а метод бы сделал void.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
Ну я привел 4 примера рабочего кода (dictionary <string, int>, object[], массив или лист пользовательских элементов типа Struct, массив или лист встроенных в c# элементов типа Tuple<T1, T2 ... Tn>)
А что выбирать, тут дело каждого. Я бы для производительности изобрел бы для себя велосипед из 2 массивов (1 массив типа string и 2 массив типа int) и записывал бы туда значения, а метод бы сделал void.
к сожалению до листов и типа Struct ещё не дошё в обучении, вчера только с массивами закончил разбираться. одно заметил, плохо, что при изложении материала, енапример по массивам, не выкладываются функции, которые с ними работают (сортировка, минимальное и максимальное значение и тд и тп)
 

Кто просматривает тему: (Всего: 8, Пользователи: 0, Гости: 8)