13.3 in 매개변수(C# 7.2)
C# 7.2에는 용도는 다르지만 ref나 out과 유사한 형태로 매개변수에 사용할 수 있는 in이라는 한정자가 새롭게 추가되었다. 매개변수에 in 한정자를 사용하면, 해당 메서드는 이 매개변수의 값을 변경할 수 없으며, 메서드 호출 시에도 인수를 매개변수로 복사하지 않고 참조로 값을 전달한다. 메서드 내부에서는 in 매개변수가 마치 읽기 전용 참조 지역 변수처럼 사용된다. 그리고 이 매개변수는 호출 측에서 전달해 준 저장소 위치에 대한 별칭으로 사용된다. 메서드가 이 매개변수의 값을 변경하지 않는다는 것이 중요하다. 만약 in 매개변수의 값을 바꿀 수 있다면, 호출 측에서도 동일하게 내용이 변경될 것이기 때문이다.
in 매개변수와 ref 혹은 out 매개변수 사이에는 큰 차이점이 있다. in으로 정의된 매개변수에 대해 호출 측에서 인수를 전달할 때는 in 한정자를 반드시 사용해야 하는 것은 아니다. in 한정자가 생략되었다면, 인수가 변수일 경우 해당 인수의 참조를 전달한다. 인수가 변수가 아닐 경우에는 보이지 않는 지역 변수 복사본을 생성한 뒤, 이 변수에 대한 참조를 전달한다. 만약 호출 측에서 인수에 대해 in 한정자를 명시적으로 지정했다면, 인수에 대한 참조를 직접 전달할 수 있는 경우에만 올바르게 컴파일이 된다. 다른 예제에 모든 가능성을 나열했다.