
Tips and Tricks for Asp.net Core Applications - yread
https://dusted.codes/advanced-tips-and-tricks-for-aspnet-core-applications
======
samuelrodriguez
Some good tips there. The `When` extension method is really nice:

`app.When(env.IsDevelopment(), app.UseDeveloperExceptionPage)`.

------
manigandham
That 'finally' clause might not run to flush Serilog at the end. The webhost
will listen to several exit events but some like window close, cancel key,
some exceptions, and others will close the program at soon as the event
handler returns. This is why the webhost registers a ManualResetEvent to block
the event handler until the Program.Main() is finished running.

Also if you're using EF migrations, then stick with the normal
CreateWebHostBuilder() method in Program.cs because it's used to bootstrap the
program to run migrations at the command line.

------
SideburnsOfDoom
Tip 12: "Working with Null Collections" has it slightly wrong: always return
empty colletions, not null ones. There are already helpers for that:
[https://docs.microsoft.com/en-
us/dotnet/api/system.linq.enum...](https://docs.microsoft.com/en-
us/dotnet/api/system.linq.enumerable.empty)

In this example, of "GetSomeCollectionFromSomewhere" returns null rather than
an empty collection, it is in error and the situation should be corrected
inside that method, not at all of the callers.

Also, why would you do "if (someCollection.Count > 0) foreach(var item in
someCollection) { ... }" ?

This is exactly equivalent to "foreach(var item in someCollection) { ... }"

~~~
manigandham
Agreed that upstream methods should always return a collection and not null.

There is some value in skipping the foreach since that calls GetEnumerator()
and may allocate, but that's very high-performance scenarios. Using LINQ to
convert everything to a list and then using IList<T>.ForEach is definitely not
recommended though. MS themselves have said that method was a mistake and that
the foreach construct should always be used for iteration.

------
restlessmedia
This is brilliant, really well written as well.

------
Mirioron
Is tip #12 actually an improvement? I think I would prefer to read the
original code than that so specific construct.

