Before C# 7.2, we did not have an efficient way of expressing a desire to pass struct variables into method calls for readonly purposes with no intention of modifying.
In C# 7.2, a new parameter passing mode called the in
parameter is introduced. It provides mechanisms that enable safe efficient code using references to value types. Use these features wisely to minimize both allocations and copy operations.
in
keyword complements the existing ref
and out
keywords to pass arguments by reference.in
keyword specifies passing the argument by reference, but the called method doesn't modify the value.private static void Print(in int val)
{
int y = val;
Console.WriteLine(y);
y = y + 10;
Console.WriteLine(y);
Console.WriteLine(val);
}
As you can see that the variable val
is passed as the in
parameter and it is used by the Print
function without any modification and used as readonly
. Now if you try to modify the val
inside the Print
function as shown below.
private static void Print(in int val)
{
int y = val;
Console.WriteLine(y);
y = y + 10;
Console.WriteLine(y);
val = val + 10; //Error
Console.WriteLine(val);
}
You will see the following error.
Error CS8331 Cannot assign to variable 'in int' because it is a readonly variable