老問題,但需要一個更好的解決方案,我認爲的。
你可以得到一個名爲採取的元組類型的優勢,但在一個包裝.Item1,.Item2等有意義的屬性名稱自定義命名類型包裹它的參數。
我太討厭這樣一個事實,即元組具有未命名的參數,使代碼無法讀取,但不能忽略它自己節省的時間,無法自行實現IComparable,IStructuralEquatable等,以便您可以安全地將結構用作字典關鍵,例如。
我覺得這是一個非常愉快的妥協:
public class Velocity : Tuple<double, double, string>
{
public Velocity(double Speed, double Direction, string Units) : base(Speed, Direction, Units) { }
public double Speed { get { return this.Item1; } }
public double Direction { get { return this.Item2; } }
public string Units { get { return this.Item3; } }
}
現在不是這種垃圾:
Tuple<double, double, string> myVelocity = new Tuple<double, double, string>(10, 2.34, "cm/s");
System.Diagnostics.Debug.Print("Speed: " + myVelocity.Item1);
System.Diagnostics.Debug.Print("Direction: " + myVelocity.Item2);
System.Diagnostics.Debug.Print("Units: " + myVelocity.Item3);
你得到這樣做:
Velocity myVelocity2 = new Velocity(10, 2.34, "cm/s");
System.Diagnostics.Debug.Print("Speed: " + myVelocity2.Speed);
System.Diagnostics.Debug.Print("Direction: " + myVelocity2.Direction);
System.Diagnostics.Debug.Print("Units: " + myVelocity2.Units);
而且你還受益從所有美妙的元組功能,讓你用它作爲一個複雜的密鑰在字典等
唯一的缺點是,如果你只使用單一方法的範圍內,本計劃的元組,您必須聲明,方法中包含類的範圍內的類型。對於大多數應用程序,我不認爲這是一個問題。
我想避免一個自定義的類/結構的原因是,我不喜歡打字!沒有什麼更多。 – ligos 2009-09-30 03:06:37
這行我應該不包括Tuple。 var result = CalculateStuffTuple(1,2); – 2012-02-03 11:49:38