This library helps write code in more functional way. To get to know more about the principles behind it, check out the Applying Functional Principles in C# Pluralsight course.
Available on nuget
PM> Install-Package CSharpFunctionalExtensions
.NET 4.0 version is available as a separate package on nuget
PM> Install-Package CSharpFunctionalExtensionsNet4.0
Result<CustomerName>name=CustomerName.Create(model.Name);Result<Email>email=Email.Create(model.PrimaryEmail);Resultresult=Result.Combine(name,email);if(result.IsFailure)returnError(result.Error);varcustomer=newCustomer(name.Value,email.Value);Maybe<Customer>customerOrNothing=_customerRepository.GetById(id);if(customerOrNothing.HasNoValue)returnError("Customer with such Id is not found: "+id);return_customerRepository.GetById(id).ToResult("Customer with such Id is not found: "+id).Ensure(customer =>customer.CanBePromoted(),"The customer has the highest status possible").OnSuccess(customer =>customer.Promote()).OnSuccess(customer =>_emailGateway.SendPromotionNotification(customer.PrimaryEmail,customer.Status)).OnBoth(result =>result.IsSuccess?Ok():Error(result.Error));return_customerRepository.GetById(id).ToResult("Customer with such Id is not found: "+id).Ensure(customer =>customer.CanBePromoted(),"The customer has the highest status possible").OnSuccessWithTransactionScope(customer =>Result.Ok(customer).OnSuccess(customer =>customer.Promote()).OnSuccess(customer =>customer.ClearAppointments())).OnSuccess(customer =>_emailGateway.SendPromotionNotification(customer.PrimaryEmail,customer.Status)).OnBoth(result =>result.IsSuccess?Ok():Error(result.Error));- Functional C#: Primitive obsession
- Functional C#: Non-nullable reference types
- Functional C#: Handling failures, input errors
- Applying Functional Principles in C# Pluralsight course
A big thanks to the project contributors!