The Framework Design Guidelines (a book by Krzysztof Cwalina and Brad Abrams) recommend to avoid both ref
and out
parameters.
AVOID using
out
orref
parameters.Using
out
orref
parameters requires experience with pointers, understanding how value types and reference types differ, and handling methods with multiple return values. Also, the difference betweenout
andref
parameters is not widely understood. Framework architects designing for a general audience should not expect users to master working without
orref
parameters.
The Framework Design Guidelines cite the canonical Swap
method as a valid exception:
void Swap<T>(ref T obj1, ref T obj2)
{
T temp = obj1;
obj1 = obj2;
obj2 = temp;
}
but at the same time a comment remarks
Swap always comes up in these discussions, but I have not written code that actually needed a swap method since college. Unless you’ve got a very good reason, avoid
out
andref
altogether.