using System.Collections.Generic;
public static void Main()
TestDateOnlyAndTimeOnly();
TestConstInterpolation();
public static void TestDateOnlyAndTimeOnly()
WriteHeading("Date Only and Time Only", "No more DateTime shinnanigans when you only need Date or Time.");
DateOnly date = DateOnly.MinValue;
Console.WriteLine("DateOnly.MinValue: " + date);
TimeOnly time = TimeOnly.MinValue;
Console.WriteLine("TimeOnly.MinValue: " + time);
TimeOnly startTime = TimeOnly.Parse("10:00am");
TimeOnly endTime = TimeOnly.Parse("10:00pm");
var isBetween = TimeOnly.Parse("9:00am").IsBetween(startTime, endTime);
Console.WriteLine("Time 9:00am is between: 10:00am and 10:00pm: " + isBetween);
isBetween = TimeOnly.Parse("1:30pm").IsBetween(startTime, endTime);
Console.WriteLine("Time 1:30am is between: 10:00am and 10:00pm: " + isBetween);
public static void TestLinqOrDefault()
WriteHeading("LINQ OrDefault Enhancement", "Pass Default value for FirstOrDefault and other OrDefault calls.");
var list = new List<int?> { 1, 2, 3 };
var result = list.FirstOrDefault(x => x == 4, -1);
Console.WriteLine("FirstOrDefault for 4 returned: " + result);
public static void TestIEnumerableChunk()
WriteHeading("IEnumerable Chunk", "Easily iterate chunks of enumerable.");
var list = Enumerable.Range(1, 95);
foreach(var chunk in list.Chunk(chunkSize))
Console.Write("Chunk #" + chunkIndex + ": ");
foreach(var item in chunk)
Console.Write(item + " ");
public static void TestPriorityQueue()
WriteHeading("Priority Queue", "Item with highest priority is the first one that gets popped.");
var pQueue = new PriorityQueue<string, int>();
while (pQueue.TryDequeue(out string item, out int priority))
Console.WriteLine($"Popped: {item}. Priority: {priority}");
public string Name { get; set; }
public int Age { get; set; }
public static void TestMaxBy()
WriteHeading("MaxBy MinBy", "Return whole object that contains max/min property value instead of just max/min value.");
var customers = new List<Customer>
Console.WriteLine("Max Age:" + customers.Max(x => x.Age));
Console.WriteLine("MaxBy Age:");
FiddleHelper.Dump(customers.MaxBy(x => x.Age));
Console.WriteLine("Min Age:" + customers.Min(x => x.Age));
Console.WriteLine("MinBy Age:");
FiddleHelper.Dump(customers.MinBy(x => x.Age));
private const string scheme = "https";
private const string url = $"{scheme}://dotnetfidlle.net";
public static void TestConstInterpolation()
WriteHeading("Const String Inerpolation", "Use $\"{...}...\" in string constants");
Console.WriteLine("Url: " + url);
public static void WriteHeading(string name, string description = null)
Console.WriteLine("===========================");
Console.WriteLine("- " + description);