.NET開発者のためのブログメディア
[C#]複数の戻り値を返す方法とは?クラスオブジェクト・構造体・outパラメータ・refパラメータ・タプル
- SE
- C#で複数の戻り値を返すにはどうすればいいのですか。
- PM
- クラスオブジェクト、構造体、outパラメータ、refパラメータ、タプルを利用することで複数の戻り値を実現できます。
目次
[C#]複数の戻り値を返す方法とは?
今回は、C#で複数の戻り値を返す方法について説明します。通常、関数は一つの戻り値しか返せません。クラスオブジェクト、構造体、outパラメータ、refパラメータ、タプルを利用することで、複数の戻り値を実現できます。
C#で複数の戻り値を返す方法に興味のある方はぜひご覧ください。
クラスオブジェクト
C#では、クラスオブジェクトを利用すると、複数の戻り値を返せます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
using System;
// クラス宣言
public class Human{
// クラスメンバ
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
// コンストラクタ
public Human(string Name, int Age, string Email){
this.Name = Name;
this.Age = Age;
this.Email = Email;
}
}
public class Hello{
public static void Main(){
// クラスオブジェクト生成
// 表示
Console.WriteLine("name:{0}, age:{1}, email:{2}", human1.Name, human1.Age, human1.Email); // name:taro, age:30, email:[email protected]
Console.WriteLine("name:{0}, age:{1}, email:{2}", human2.Name, human2.Age, human2.Email); // name:jiro, age:20, email:[email protected]
}
}
|
実行結果は以下のようになります。クラスオブジェクトに複数の変数を格納することで、複数の戻り値となります。
1
2
|
name:taro, age:30, email:taro@email.com
name:jiro, age:20, email:jiro@email.com
|
このようにC#では、クラスオブジェクトを利用すると、複数の戻り値を返せます。
構造体
C#では、構造体を利用すると、複数の戻り値を返せます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
using System;
public class Hello{
// 構造体の宣言
public struct Human{
public string name;
public int age;
public string email;
}
public static void Main(){
// 構造体型のインスタンス化
Human human1;
human1.name = "taro";
human1.age = 30;
Human human2;
human2.name = "jiro";
human2.age = 20;
// 表示
Console.WriteLine("name:{0}, age:{1}, email:{2}", human1.name, human1.age, human1.email); // name:taro, age:30, email:[email protected]
Console.WriteLine("name:{0}, age:{1}, email:{2}", human2.name, human2.age, human2.email); // name:jiro, age:20, email:[email protected]
}
}
|
実行結果は以下のようになります。構造体に複数の変数を格納することで、複数の戻り値となります。
1
2
|
name:taro, age:30, email:taro@email.com
name:jiro, age:20, email:jiro@email.com
|
このようにC#では、構造体を利用すると、複数の戻り値を返せます。
outパラメータ
C#では、outパラメータを利用すると、参照渡しで複数の戻り値を返せます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
using System;
public class Hello{
static int Func(out int a, out int b){
a = 300;
b = 400;
return a + b;
}
public static void Main(){
// 変数初期化
int x = 100;
int y = 200;
// out修飾子を付けて呼び出す。参照渡しで複数の戻り値を返せる
int z = Func(out x, out y);
// 表示
Console.WriteLine("x:{0}, y:{1}, z:{2}", x, y, z); // x:300, y:400, z:700
}
}
|
実行結果は以下のようになります。
1
|
x:300, y:400, z:700
|
このようにC#では、outパラメータを利用すると、複数の戻り値を返せます。
refパラメータ
C#では、refパラメータを利用すると、参照渡しで複数の戻り値を返せます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
using System;
public class Hello{
static void Func(ref int x, ref int y){
x = x + 300;
y = y + 400;
}
public static void Main(){
// 変数初期化
int x = 100;
int y = 200;
// ref修飾子を付けて呼び出す。参照渡しで複数の戻り値を返せる
Func(ref x, ref y);
// 表示
Console.WriteLine("x:{0}, y:{1}", x, y); // x:400, y:600
// ref修飾子を付けて呼び出す
Func(ref x, ref y);
// 表示
Console.WriteLine("x:{0}, y:{1}", x, y); // x:700, y:1000
}
}
|
実行結果は以下のようになります。
1
2
|
x:400, y:600
x:700, y:1000
|
このようにC#では、refパラメータを利用すると、複数の戻り値を返せます。
タプル
C#では、タプルを利用すると、複数の戻り値を返せます。Visual Studio の場合、ツール(T) → Nuget パッケージマネージャ(N) からSystem.ValueTuple パッケージの参照を設定してください。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
using System;
namespace ConsoleApplication1
{
class Program
{
static (string name, int age, string email) GetInfo()
{
}
public static void Main()
{
// タプルで取得
var human = GetInfo();
// 表示
Console.WriteLine("name:{0}, age:{1}, email:{2}", human.name, human.age, human.email); // name:taro, age:30, email:[email protected]
}
}
}
|
実行結果は以下のようになります。
1
|
name:taro, age:30, email:taro@email.com
|
このようにC#では、タプルを利用すると、複数の戻り値を返せます。
- SE
- クラスオブジェクト、構造体、outパラメータ、refパラメータ、タプルを利用して複数の戻り値を実現する方法について、よく分かりました。
- PM
- ご紹介したソースコードを参考に、実際にご自身でもソースコードを書いてみてください。
まとめ
いかがでしたでしょうか。C#で複数の戻り値を返す方法について説明しました。クラスオブジェクト、構造体、outパラメータ、refパラメータ、タプルを利用することで、複数の戻り値を実現できます。
ぜひご自身でソースコードを書いて、理解を深めてください。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)