Кортежи значений существуют, так зачем использовать модификатор параметра «out»?

В дополнение к простоте использования c-sharp шаблона TryX, как указано в ascpixi, еще csharp один случай, который делает valuetuple кортеж значений непригодным c#.net в качестве возвращаемого c#-language типа, — это когда одно из out двух значений является ссылкой. Например, взгляните c#.net на CollectionsMarshal.GetValueRefOrAddDefault API:

public static ref TValue? GetValueRefOrAddDefault (
    Dictionary dictionary,
    TKey key,
    out bool exists);

Используется так:

ref int refValue = ref CollectionsMarshal.GetValueRefOrAddDefault(
    dictionary, key, out bool exists);

if (!exists) refValue = 1; else refValue++;

ValueTuple не c#-language является ref struct, поэтому его нельзя visual-c# использовать для этого API. Теоретически c-sharp этот API может возвращать out пользовательский кортеж, похожий c# на ref struct, но в этом случае ему visual-c# будет не хватать языковой c#.net поддержки, которая существует c-sharp только для реальных кортежей .cs-file значений, например, сокращенной visual-c# записи со скобками и т. д.

c#

out

valuetuple

2022-11-28T06:26:02+00:00