我们应该使用 Tuple 还是 ValueTuple 作为仅引用类型的变量?

dev*_*ton 4 .net c# tuples c#-7.0 valuetuple

有很多问题只包含没有GCTuple(class)压力的情况下与ValueTuple(struct) All gone with之间的差异。但我不明白为什么要接受所有数据类型?为什么不只接受设计为结构的结构。ValueTupleValueTupleValueTuple

乍看上去。将引用类型与 ValueTuple 一起使用是否安全且性能更高?

例子

ValueTuple<CarClass, EngineClass> CarBody

或者我们应该去吗

Tuple<CarClass, EngineClass> CarBody

我看到的所有示例都包含ValueTuple<int, int, long, structs only>它是否仅用于此目的?我使用的许多代码都使用ValueTuple<ReferenceTypes>

Gyö*_*zeg 7

为什么不只ValueTuple接受设计为结构体的结构体呢?

结构总是可以有引用。没有什么可以阻止您使用KeyValuePair<CarClass, EngineClass>其中任何一个,其中KeyValuePair<TKey, TValue>也是一种值类型。

ValueTuple在没有GC压力的情况下一切都消失了。

这里面一定有误会。当然,带有引用类型参数的值元组将被 GC 跟踪。这只是意味着不会因为将一些引用分组到ValueTuple. 另一方面,usingTuple<>意味着额外的引用,这显然会产生一些额外的 GC 成本。

将引用类型与 ValueTuple 一起使用是否安全?

有点不清楚这里的安全是什么意思,但是是的,它肯定是安全的。

是否比其他更好取决于使用情况。许多参数 ( ValueTuple<int, int, long, other structs>) 可能会导致较大的值。如果您经常在方法中传递如此大的值,那么最终的性能可能会比仅传递引用更差。但如果这并不重要,您完全可以使用值元组,它具有方便的语法支持(如果需要,它们仍然可以通过 or 修饰符通过引用传递inref