Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2010, 15:29   #1
Sempe4
 
Регистрация: 06.09.2009
Сообщений: 9
По умолчанию Передача массива в метод

как в С шарпе передать в метод ссылку на массив неопределенного размера??
Sempe4 вне форума Ответить с цитированием
Старый 16.06.2010, 15:53   #2
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Например так
Код:
void metod (Array value);
или
Код:
void metod (object value);
ну или
Код:
void metod (int[] value);
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 16.06.2010, 16:31   #3
Sempe4
 
Регистрация: 06.09.2009
Сообщений: 9
По умолчанию

ну это ты написал мне заголовки, возьмем третий.
если так:
int[] a;
metod(a);
то ошибка:Use of unassigned local variable 'а'
а если так:
int[] a;
metod(&a);
то
C:\Documents and Settings\Max\Мои документы\Visual Studio 2005\Projects\ClassDB\ClassDB\Progr am.cs(21,25): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('ClassDB.int[]')
C:\Documents and Settings\Max\Мои документы\Visual Studio 2005\Projects\ClassDB\ClassDB\Progr am.cs(21,13): error CS1502: The best overloaded method match for 'ClassDB.BD.get_Name(ClassDB.int[])' has some invalid arguments
C:\Documents and Settings\Max\Мои документы\Visual Studio 2005\Projects\ClassDB\ClassDB\Progr am.cs(21,25): error CS1503: Argument '1': cannot convert from 'ClassDB.int[]*' to 'ClassDB.int[]'

А если задать размер массива, то все работает...

Последний раз редактировалось Sempe4; 16.06.2010 в 16:34.
Sempe4 вне форума Ответить с цитированием
Старый 16.06.2010, 16:37   #4
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

А чтобы метод отредактировал массив и массив изменился, то так (используем ключевое слово ref):
Код:
private void metod (ref int[] value);
{
    int[0] = 777;
}

class Test
{
   ...
   int[] arr = new int[2];
   arr[0] = 999;
   metod(ref arr);
   MessageBox.Show(arr[0].ToString());
   ...
}
В результате MessageBox покажет:
777


А если просто передать надо, но не менять оригинальный массив, то так:

Код:
private void metod (int[] value);
{
    int[0] = 777;
}

class Test
{
   ...
   int[] arr = new int[2];
   arr[0] = 999;
   metod(arr);
   MessageBox.Show(arr[0].ToString());
   ...
}
В результате MessageBox покажет:
999

Где-то так, не в студии писал

Последний раз редактировалось Casper-SC; 16.06.2010 в 16:40.
Casper-SC вне форума Ответить с цитированием
Старый 16.06.2010, 16:54   #5
Sempe4
 
Регистрация: 06.09.2009
Сообщений: 9
По умолчанию

To Casper-SC
так работает, но если изначально я не знаю размер массива, и он должен быть определен в этом методе, то как это организовать?
Sempe4 вне форума Ответить с цитированием
Старый 16.06.2010, 16:57   #6
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Попробуй так, только отпиши работает?
В случае с out массив должен быть обязательно проинициализирован в методе
Код:
private void metod (out int[] value);
{
    value = new int[5];
    int[0] = 777;
}

class Test
{
   ...
   int[] arr;
   metod(out arr);
   MessageBox.Show(arr[0].ToString());
   ...
}

Последний раз редактировалось Casper-SC; 16.06.2010 в 17:00.
Casper-SC вне форума Ответить с цитированием
Старый 16.06.2010, 17:25   #7
Sempe4
 
Регистрация: 06.09.2009
Сообщений: 9
По умолчанию

да, работает, спасибо!)))
Sempe4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача двумерного динамического массива в метод Дырдин Общие вопросы C/C++ 1 19.03.2010 09:45
передача информации. метод post NSvirus PHP 2 27.10.2009 13:57
Передача массива в функцию D[I]K Общие вопросы C/C++ 4 13.09.2009 21:31
Передача массива по указателю liver1981 Общие вопросы C/C++ 3 21.04.2009 17:07
Передача метода класса в качестве параметра в другой метод Dmytry87 Общие вопросы C/C++ 0 12.11.2008 15:28