C# Keywords Tutorial Part 44: in
Amr Saafan
Founder | CTO | Software Architect & Consultant | Engineering Manager | Project Manager | Product Owner | +27K Followers | Now Hiring!
C# is a modern, multi-paradigm programming language that is widely used in enterprise applications, gaming, and web development. One of the most useful features of C# is the “in” keyword. In this blog post, we will explore what the “in” keyword is, how it works, and some examples of how it can be used.
What is the “in” keyword?
By utilizing the “in” keyword, a feature introduced in C# 7.2, it becomes possible to pass value types by reference into a method without having to create a copy of the value. This feature comes in handy when working with large value types or seeking to improve performance by bypassing redundant copies.
How does the “in” keyword work?
The “in” keyword in C# shares some similarities with the “ref” keyword. However, a key difference between them is that the “in” keyword does not allow modification of the value inside the method.
This is because the value is passed by reference as a read-only reference. If an attempt is made to alter the value within the method, it will trigger a compilation error. While this may appear restrictive, it is beneficial in averting unintentional side-effects and promoting predictability in your code.
Example usage of the “in” keyword
Let’s take a look at some examples of how the “in” keyword can be used in C#.
领英推荐
Example 1: Passing a struct by reference
Suppose you have a struct that contains a large amount of data, and you want to pass it into a method without creating a copy of the data. Here’s how you can do it using the “in” keyword:
public struct LargeStruct
{
? ? public int Field1;
? ? public int Field2;
? ? // ...
}
public void ProcessLargeStruct(in LargeStruct largeStruct)
{
? ? // Do something with largeStruct
}
// Usage
var largeStruct = new LargeStruct { Field1 = 42, Field2 = 123 };
ProcessLargeStruct(largeStruct);
In this example, we define a struct called “LargeStruct” that contains two integer fields. We then define a method called “ProcessLargeStruct” that takes a single parameter of type “in LargeStruct”. This means that the “largeStruct” parameter is passed by reference, but cannot be modified inside the method.
To use the method, we create a new instance of “LargeStruct” and pass it into “ProcessLargeStruct” using the “in” keyword.
Example 2: Passing an array by reference
The “in” keyword can also be used with arrays. Here’s an example:
public void ProcessArray(in int[] numbers)
{
? ? foreach (var number in numbers)
? ? {
? ? ? ? // Do something with number
? ? }
}
// Usage
var numbers = new int[] { 1, 2, 3 };
ProcessArray(numbers);
In this example, we define a method called “ProcessArray” that takes an array of integers as a parameter. We use the “in” keyword to pass the array by reference, but as a read-only reference.
To use the method, we create a new array of integers and pass it into “ProcessArray” using the “in” keyword.