https://zoheirsoftware.com/blog/function-in-csharp-training