老问题,但需要一个更好的解决方案,我认为的。
你可以得到一个名为采取的元组类型的优势,但在一个包装.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