タプルのプロパティをItem1、Item2などと呼ばなければならない特定の理由はありますか。コード内で簡単に混同される可能性があるため、これは私には悪い考えのように思えます。プロパティに名前を付けることができる方がはるかに意味がありませんか。赤、緑、青?
6 に答える
タプル<...>クラスは通常のC#クラスです。C#は、動的に名前が付けられたプロパティを持つ方法を提供していません(DictionaryまたはExpandoObjectのような動的オブジェクトを使用することを除いて)。ただし、C#は、匿名型を介して必要なものを提供します。
var x = new { Red = 10, Blue = 20, Green = 30 }
var sum = x.Red + x.Blue + x.Green;
匿名型が機能する理由は、それらがカスタムタプルクラスをその場で定義するための便利な構文にすぎないためです。
これらには、名前付きタプルのように動作するという利点がありますが、プログラマーが名前を付けることができないという欠点があります(したがって、匿名型を明示的に返すメソッドを作成することはできません)。
名前が必要な場合は、タプルを使用しないでください。
匿名タイプ:
var t = new { Green = 1, Red = "nice" };
if (t.Green > 0) ....
これを行う場合は、適切な名前のプロパティを持つクラスを作成します。タプルは、メソッドから複数の値を返したい場合に、クラスを作成したり、パラメーターを使用したりする必要を回避するための、手早く汚い方法です。
常に赤/青に偏っている場合は、このように(ジェネリックを使用して)クラスを定義できます。それ以外の場合は、他の人が提案する匿名型を使用できます。
class RedBluePair<T1, T2>
{
private T1 _Red;
private T2 _Blue;
public RedBluePair(T1 red, T2 blue)
{
_Red = red;
_Blue = blue;
}
public T1 Red { get { return _Red;} }
public T2 Blue { get { return _Blue;} }
}
タプルには、意味のあるプロパティは含まれていません。それは、グループにまとめられた使い捨てのセットです。
意味のあるプロパティ名が必要な場合は、それらのプロパティで型を作成します。クラスを最初から作成してそのクラスを使用するか、匿名型を使用することができます。