Skip to content

Instantly share code, notes, and snippets.

Marius Gundersen mariusGundersen

Block or report user

Report or block mariusGundersen

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@mariusGundersen
mariusGundersen / Example11.cs
Created Oct 21, 2018
Duct-typed extension methods Example 11
View Example11.cs
// Example 11: add with params
// Use params to take several ints, each representing 3 digits
public static void Add<TKey>(this IDictionary<TKey, int> dictionary, TKey key, params int[] values)
=> dictionary.Add(key, values.Aggregate(0, (s, v) => s*1000 + v));
// Now we can write it like this
var populations = new Dictionary<string, int>
{
{ "China", 1,409,517,397 },
@mariusGundersen
mariusGundersen / Example10.cs
Created Oct 21, 2018
Duct-typed extension methods Example 10
View Example10.cs
// Example 10: add a tuple
// This is just a dummy class that we can use in the example
public class City
{
public City(string name, int population, string country)
{
Name = name;
Population = population;
Country = country;
@mariusGundersen
mariusGundersen / Example9.cs
Created Oct 21, 2018
Duct-typed extension methods Example 9
View Example9.cs
// Example 9: multi or single dimensional arrays?
// We define this extension method
public static void Add<T>(this List<T> list, params T[] items)
=> list.AddRange(items);
// And then we can make a flattened matrix
var matrix = new List<double>
{
{ 1, 0, 0 },
@mariusGundersen
mariusGundersen / Example8.cs
Last active Oct 21, 2018
Duct-typed extension methods Example 8
View Example8.cs
// Example 8: add a new instance
// This is just a dummy class that we can use in the example
public class City
{
public City(string name, int population, string country)
{
Name = name;
Population = population;
Country = country;
@mariusGundersen
mariusGundersen / Example7.cs
Last active Oct 21, 2018
Duct-typed extension methods Example 7
View Example7.cs
// Example 7: add a dictionary
// These are just some dummy methods for the example to work
public static IDictionary<string, int> GetAfricanCountries() => new Dictionary<string, int>{
{ "Nigeria", 190_886_311 },
{ "Ethiopia", 104_957_438 },
{ "Egypt", 97_553_151 }
};
public static IDictionary<string, int> GetEuropeanCountries() => new Dictionary<string, int>{
{ "Russia", 146_864_513 },
@mariusGundersen
mariusGundersen / Example6.cs
Created Oct 21, 2018
Duct-typed extension methods Example 6
View Example6.cs
// Example 6: Add a list
// This is just a dummy method that returns some ints
public static IEnumerable<int> GetAnotherListOfInts()
=> new[] { 10, 11, 12, 13 };
// With this extension method...
public static void Add<T>(this List<T> list, IEnumerable<T> items)
=> list.AddRange(items);
@mariusGundersen
mariusGundersen / Example5.cs
Created Oct 21, 2018
Duct-type extension methods Example 5
View Example5.cs
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
// Example 5: await tuple of Tasks
// Just some dummy async functions
public static Task<string> GetSomethingAsync(int number) => Task.FromResult($"Something {number}");
public static Task<int> GetAnotherThingAsync(string text) => Task.FromResult(text.Length);
// This extension method lets us await a tuple with two values
@mariusGundersen
mariusGundersen / Example4.cs
Created Oct 21, 2018
Duct-typed extension methods Example 4
View Example4.cs
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
// Example 4: await IEnumerable<Task<T>>
// Just a dummy async function
public static Task<string> GetSomethingAsync(int number) => Task.FromResult($"Something {number}");
// This extension method allows us to await many tasks
public static TaskAwaiter<T[]> GetAwaiter<T>(this IEnumerable<Task<T>> manyTasks)
@mariusGundersen
mariusGundersen / Example3.cs
Last active Oct 21, 2018
Duct-typed extension methods Example 3
View Example3.cs
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
// Example 3: await Lazy<Task<T>>
// Just a dummy async function
public static Task<string> GetSomethingAsync(int number) => Task.FromResult($"Something {number}");
// We need a lazy variable to work with
var lazySomething = new Lazy<Task<string>>(() => GetSomethingAsync(10));
@mariusGundersen
mariusGundersen / Example2.cs
Created Oct 21, 2018
Duct-typed extension methods, example 2
View Example2.cs
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
// Example 2: await anything
public static TaskAwaiter<T> GetAwaiter<T>(this T nonAwaitable)
=> Task.FromResult(nonAwaitable).GetAwaiter();
// Now we can write code like this
await "Hello world";
await 100;
You can’t perform that action at this time.