to read this code you need to understand delegate callbacks:
https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/
and linq:
https://learn.microsoft.com/en-us/dotnet/standard/linq/
and lambda expressions:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-expressions
note: the code:
IEnumerable<NumberHolder> multiplyResult = nums.Select(i => Multiply(i)); IEnumerable<NumberHolder> addOneResult = nums.Select(i => AddOne(i));
can be simplified to:
var multiplyResult = nums.Select(Multiply)
var addOneResult = nums.Select(AddOne);