忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

tuple C#7.0メモ

C#7.0では気軽にtupleが使えるようになっています。


using System;

class Program
{
    static void Main()
    {
        (double x, double y) = GetPoint();
        Console.WriteLine(x + ", " + y);
    }

    static (double, double) GetPoint()
    {
        return (2.0, 3.0);
    }
}

※現時点ではビルドするのにこれが必要です。VisualStudio2017RCのNuGetからインストールします。

結果

2, 3

すばらしい!System.Tupleをいちいち使っていた以前とは格段に書きやすくなっています!デリゲートがクロージャになったときのことを思い出します。

var

varを使うこともできます。

using System;

class Program
{
    static void Main()
    {
        (var x, var y) = GetPoint();
        Console.WriteLine(x + ", " + y);
    }

    static (double, double) GetPoint()
    {
        return (2.0, 3.0);
    }
}

結果

2, 3

宣言をまとめる

型をたくさん書くのがめんどうなら、こう書くこともできます:

using System;

class Program
{
    static void Main()
    {
        var (x, y) = GetPoint();
        Console.WriteLine(x + ", " + y);
    }

    static (double, double) GetPoint()
    {
        return (2.0, 3.0);
    }
}

結果

2, 3

個人的にはこっちのほうが短くて良さそうです。

既存の変数をTupleの要素として使う

using System;

class Program
{
    static void Main()
    {
        var x = 10.0;
        var y = 100.0;
        (x, y) = GetPoint();
        Console.WriteLine(x + ", " + y);
    }

    static (double, double) GetPoint()
    {
        return (2.0, 3.0);
    }
}

結果

2, 3

変数の再利用です。自前のものがあるならわざわざ新しく宣言する必要はありません。

名前付き

using System;

class Program
{
    static void Main()
    {
        var point = GetPoint();
        Console.WriteLine(point.x + ", " + point.y);
    }

    static (double x, double y) GetPoint()
    {
        return (2.0, 3.0);
    }
}

結果

2, 3

これは面白いですね。まるでxとyというフィールドを持った構造体を即席で作っているようです。

拍手[0回]

PR