"Returning Values in Parameter References".
In C# parameters are typically passed by copying the value into the new function, but using the [out parameter modifier](https://github.com/louthy/language-ext#the-awful-out-parameter) you can specify that the parameter is to be passed by reference instead - essentially sharing the value with the caller and callee so that the value can be mutated directly by the function it is passed into.
The main justification in C# seems to be that they want to return multiple values without using a struct. Where often the actual return value conveys some kind of status information (like a boolean) and the mutable pass-by-reference object contains the actual useful information.
The [[Functional - C Sharp Functional Language Extensions]] library criticises this pattern and encourages using [[C Sharp#Implementing Optional Types|Optional Types instead]].
See also: [[Goal-Directed]], [[Destructuring Assignment]]
# Cognates
This is related to a common pattern in [[3. Reference/Software/Programming Languages/C|C]] often called "output parameters", "parameter pointers", and others.
This is where pointers are passed into functions and then that function modifies the objects the pointer references. The function may return nothing or may return a status value, but the pointed to value is what is most pertinent to the computation. The main justification for why it is so common in C is so the caller can decide how to allocate the value in memory.