bagus bujangga Ответов: 5

Функция возврата нескольких значений C#.


Привет всем,
Я хочу создать новую функцию, как показано ниже:

public static Bitmap TapisKotak(Bitmap Img,int Width,int Hight,int StartX,int StartY, int RowsY,int ColumnX)
{
    bitmap Img_process=new bitmap(Img);
    int New_Coordinat_X, New_Coordinat_Y;
    //process here and I get that I want... so i return the image modified (image object) and any value in int variable

    return(bitmap Img_process);   //==> this object image
    return(New_Coordinat_X);      //==> this int value 1
    return(New_Coordinat_Y);     //==> this int value 2
}


в этом коде я хочу вернуть несколько значений, включая объект и числовое значение. как это сделать на C#????
спасибо за помощь.

5 Ответов

Рейтинг:
39

Sergey Alexandrovich Kryukov

Сценарий? Ты серьезно? C# - это не язык сценариев.

Существует несколько способов возврата двух объектов из одной функции. Вы можете вернуть один как обычный возврат а другой как обычный возврат out параметр. Вы можете создать некоторый тип (класс или структуру) с двумя членами (object и numeric) и вернуть объект этого типа. Кроме того, можно использовать уже определенный универсальный тип с двумя членами. Такой тип, в частности, это Tuple:
http://msdn.microsoft.com/en-us/library/system.tuple.aspx[^].

—СА


JayantaChatterjee

Мой 5...

Sergey Alexandrovich Kryukov

Спасибо, Джаянта.
—СА

bagus bujangga

Спасибо, Сергей, я сейчас читаю эту статью кортежа.

Sergey Alexandrovich Kryukov

Конечно. Я думаю, что вы можете принять ответ формально (зеленая кнопка).
—СА

Thomas Daniels

+5!

bagus bujangga

Да, я могу использовать Кортеж для решения своей проблемы
Спасибо Сергей Александрович :D

Sergey Alexandrovich Kryukov

Спасибо,
—СА

Sergey Alexandrovich Kryukov

Добро пожаловать.
Удачи, звоните еще раз.
—СА

Рейтинг:
2

Chandra Shekhar Joshi

Используйте кортеж или используйте параметры out.


Рейтинг:
2

GuilhermeAlencar

public static IEnumerator TapisKotak(Bitmap Img,int Width,int Hight,int StartX,int StartY, int RowsY,int ColumnX)<br />
{<br />
    bitmap Img_process=new bitmap(Img);<br />
    int New_Coordinat_X, New_Coordinat_Y;<br />
    //process here and I get that I want... so i return the image modified (image object) and any value in int variable<br />
<br />
    yield return bitmap Img_process;   //==> this object image<br />
    yield return New_Coordinat_X;      //==> this int value 1<br />
    yield return New_Coordinat_Y;     //==> this int value 2<br />
}


Maciej Los

Зачем отвечать на уже заданный вопрос?
Кстати: 5 лет слишком поздно!

GuilhermeAlencar

Потому что не только один человек в мире будет нуждаться в этом ответе.

Рейтинг:
1

Matteo Fabbri

Внутри той же сборки вы можете использовать типы anon:


public static dynamic TapisKotak(Bitmap Img,int Width,int Hight,int StartX,int StartY, int RowsY,int ColumnX)
{
    bitmap Img_process=new bitmap(Img);
    int New_Coordinat_X, New_Coordinat_Y;
    //process here and I get that I want... so i return the image modified (image object) and any value in int variable

    return new {Image = Img_process, X = New_Coordinat_X, Y = New_Coordinat_Y};
}


bagus bujangga

спасибо, но как позвонить??

Растровый Тест = Класс.Тапискотак(бла, бла,бла,...) ?

Рейтинг:
0

marcussacana

Попробуй этого человека

public void CallFuntion()
{
  //your code
   object[] Return = TapisKotak(Img, width, Heigth, StartX, StartY, RowsY, ColumnX)
   bitmap img_processed = (bitmap)Return[0];
   int New_Coordinat_X = (int)Return[1];
   int New_Coordinat_Y = (int)Return[2];
   //Now you have all values returned!
}

public static object[] TapisKotak(Bitmap Img,int Width,int Hight,int StartX,int StartY, int RowsY,int ColumnX)
{
    bitmap Img_process=new bitmap(Img);
    int New_Coordinat_X, New_Coordinat_Y;
    //process here and I get that I want... so i return the image modified (image object) and any value in int variable

    return new object[] {Img_process, New_Coordinat_X, New_Coordinat_Y};
}