7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【C#】関数から2つ以上の戻り値を返す方法

Last updated at Posted at 2022-02-14

結論

Tuple型もしくは自作(カスタム)クラスを使います。

解説

簡単に関数から2つ以上の戻り値を返したい場合はTuple型を使用します。

使用方法は下記になります。

Tuple型で返す
        /// <summary>
        /// ユーザーの名前と年齢を返します。
        /// </summary>
        /// <returns>item1:ユーザー名, item2:年齢</returns>
        private (string, int) GetUserData()
        {
            return ("山田", 25);
        }

Tuple型からデータを取得するには下記のように記載します。

Tuple型からデータを取得する例
        private (string, int) GetUserData()
        {
            return ("山田", 25);
        }

        private void User()
        {
            var tupleData = GetUserDatas();

            //名前を取得
            var userName = tupleData.Item1;

            //年齢を取得
            var userAge = tupleData.Item2;
        }

戻り値に名前をつけることも可能です。
(@ktz_aliasさん、コメントで教えて頂きありがとうございます!)

名前付きTuple型からデータを取得する方法
// フィールド名付きタプルでメソッド定義
private (string Name, int Age) GetUserData()
{
    return ("山田", 25);
}

private void User()
{
    var tupleData = GetUserDatas();

    //名前を取得
    var userName = tupleData.Name; // フィールド名でアクセス

    //年齢を取得
    var userAge = tupleData.Age; // フィールド名でアクセス
}

厳格に関数から2つ以上の戻り値を返したい場合は自作クラスを使用します。

自作クラスを実装
    public class User
    {
        public string Name { get; }

        public int Age { get; }

        public User(string name, int age)
        {
            Name = name;
            Age = age;
        }
    }

使用方法は下記になります。

自作クラス(User)で返す
        /// <summary>
        /// ユーザーの名前と年齢を返します。
        /// </summary>
        /// <returns>Userクラス</returns>
        private User GetUserData()
        {
            return new User("山田", 25);
        }

自作クラス(User)からデータを取得するには下記のように記載します。

自作クラス(User)からデータを取得する例
        private User GetUserData()
        {
            return new User("山田", 25);
        }

        private void User()
        {
            var userData = GetUserData();

            //名前を取得
            var userName = userData.Name;

            //年齢を取得
            var userAge = userData.Age;
        }

以上です。

追記(2022/02/15)

Tapleと記載しておりましたがTupleが正しい綴りでした。@apashoniさん、編集リクエストを頂きありがとうございました!

7
8
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?