C# 存储多个值,其中一些值需要在运行时更改,由单个键引用

C# 存储多个值,其中一些值需要在运行时更改,由单个键引用,c#,C#,所以我的问题是我想基本上使用字典,但我想要的不是键值对,而是键值对/四元组/任何你想叫它的东西。我在研究元组,但结果表明,一旦设置,它们是不可变的,所以这不好。这些值中至少有一个是运行计数,因此在运行时会发生变化。仅仅使用每个数组的索引作为键来创建一个包含多个数组的类,还有什么不足吗?或者可以扩展字典,使其具有另一个名为“key2”的字段或其他内容 为什么不创建自己的值类呢 class YourValue { public int A; public float B; p

所以我的问题是我想基本上使用字典,但我想要的不是键值对,而是键值对/四元组/任何你想叫它的东西。我在研究元组,但结果表明,一旦设置,它们是不可变的,所以这不好。这些值中至少有一个是运行计数,因此在运行时会发生变化。仅仅使用每个数组的索引作为键来创建一个包含多个数组的类,还有什么不足吗?或者可以扩展字典,使其具有另一个名为“key2”的字段或其他内容

为什么不创建自己的值类呢

class YourValue
{
    public int A;
    public float B;
    public string C;
}

Dicitonary<int, YourValue> yourDictionary;
class-YourValue
{
公共INTA;
公共浮动B;
公共字符串C;
}
词典;

除非我可以把它变成一个结构,如果它只存储数据的话。如果你把它传给别人,也许不会,但在这种情况下应该没问题。@Magus哦,这不是唯一的考虑,是吗?请参见@Timotheus,它们是指导原则,Microsoft自己在框架中多次打破了它们(例如System.Drawing.Rectangle)。要考虑的最重要的事情是引用与值复制语义。两个具有相同字段值的
YourValue
实例是否表示完全相同的对象?这比其他实例的问题要小,但最后,我对其进行了更深入的研究,由于字典值是通过索引器访问的,因此在不替换整个结构的情况下,无法直接修改值,而对于一个类,您正在修改字典引用的对象,所以在这种情况下类确实更好。@Timotheus:正确!类是引用类型,结构是值类型。他的观点是,作为键,引用类型可能会导致问题,因为
(new object()==new object())==false
,因为每个引用都创建一个新引用,而
(new int()==new int())==true
,因为值类型是它们的值。作为一个值,引用类型要好得多。有时间研究一下是件好事,因为它可能会有用。