C#中的可读性和元组

And*_*ies 4 c#

元组很适合表达整个值.但它的可读性受到了惩罚,'Item1'和'Item2'并不那么直观.为了改进后者,我引入了一个类别名,如下所示.我想知道是否有人有更好的解决方案.无论如何,它仍然需要一个"专用"课程.下面的例子是天真的,它只是指出了问题.

enum Unit { Celsius, Fahrenheit }
class Temperature: Tuple<decimal, Unit>
{
        public decimal Value
        {
            get { return Item1; }
        }

        public Unit
        {
            get { return Item2; }
        }

        public Temperature(decimal item1, Unit item2) 
         : base(item1, item2)
        {
    }
}

// pseudo
var temp = new Temperature(37, Unit.Celsius);
temp.Item1 == temp.Value == 37;
temp.Item2 == temp.Unit == Unit.Celsius;
Run Code Online (Sandbox Code Playgroud)

kid*_*haw 9

你上面所做的基本上是创建一个具有两个只读属性的类,它们碰巧使用Tuple作为后备存储.

你强调的问题不是元组旨在解决的问题.元组在那里提供了一个通用的构造,用于将值包装到一个对象中,其中定义一个类被认为是太费力.我没有亲自评价它们并将它们限制在方法范围内,但匿名类型更适合 - 我当然不希望返回类型的元组,因为你突出显示的确切原因.

如果要使用带有命名属性的读/写类,请创建一个类(或结构).


Mat*_*son 8

C#6将为"主要构造函数"引入一种新语法,这将大大简化诸如你的类之类的类class Temperature.

例如:

public sealed class Temperature(decimal value, Unit unit)
{
    public decimal Value { get; } = value;
    public Unit    Unit  { get; } = unit;
}
Run Code Online (Sandbox Code Playgroud)

将来,您应该能够使用该方法.(我不打算辩论这是否是好事!)