1. ホーム
  2. c#

[解決済み] そのタプルは、どのような要件を解決するために設計されたのでしょうか?

2023-02-25 03:09:58

質問

C#の新しい機能であるタプルを見ています。私は好奇心が強いのですが、タプルはどのような問題を解決するために設計されたのでしょうか?

あなたのアプリでは、タプルを何に使いましたか?

更新

これまでのご回答ありがとうございます。 タプルの良い例として、座標が指摘されています。これは正しいように見えますか?

var coords = Tuple.Create(geoLat,geoLong);

そして、このようなタプルを使います。

var myLatlng = new google.maps.LatLng("+ coords.Item1 + ", "+ coords.Item2 + ");

ということでよろしいでしょうか?

どのように解決するのですか?

プログラムを書くとき、クラスを作成するのに十分な共通性を持っていない値のセットを論理的にグループ化したいと思うことは非常によくあることです。

多くのプログラミング言語では、一つの方法で型を作成することなく、そうでなければ無関係な値のセットを論理的にグループ化することができます。

void M(int foo, string bar, double blah)

論理的にはint, string, doubleの3タプルを1引数とするメソッドMと全く同じです。 しかし、実際には作らないことを望みます。

class MArguments
{
   public int Foo { get; private set; } 
   ... etc

MArguments がビジネスロジックで何か他の意味を持たない限り。

クラスよりも軽量な構造で、そうでなければ無関係なデータの束をまとめるというコンセプトは、メソッドの正式なパラメータリストだけでなく、多くの多くの場所で役に立ちます。メソッドが返すべきものを2つ持っている場合や、1つではなく2つのデータから辞書をキーにしたい場合など、さまざまな場面で役に立ちます。

タプル型をネイティブにサポートする F# のような言語は、ユーザーに非常に大きな柔軟性を提供します。BCLチームは、F#チームと協力して、すべての言語がその恩恵を受けられるように、フレームワークのために1つのタプル型に標準化することを決定しました。

しかし、この時点では 言語 でのタプルのサポートはありません。タプルは他のフレームワークのクラスと同様に単なるデータ型であり、特別なことは何もありません。私たちは、C# の将来の仮想的なバージョンでタプルのより良いサポートを追加することを検討しています。もし、タプルを使ったどんな機能が欲しいか、ご意見があれば、設計チームにお伝えいただければと思います。現実的なシナリオは、理論的な考察よりも説得力があります。