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

В дополнение к простоте использования csharp шаблона TryX, как указано в ascpixi, еще out один случай, который делает .cs-file кортеж значений непригодным valuetuple в качестве возвращаемого c# типа, — это когда одно из valuetuple двух значений является ссылкой. Например, взгляните visual-c# на 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 не out является ref struct, поэтому его нельзя valuetuple использовать для этого API. Теоретически c-sharp этот API может возвращать csharp пользовательский кортеж, похожий .cs-file на ref struct, но в этом случае ему .cs-file будет не хватать языковой csharp поддержки, которая существует c#-language только для реальных кортежей c#.net значений, например, сокращенной c#.net записи со скобками и т. д.

c#

out

valuetuple

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