Skip to content

Instantly share code, notes, and snippets.

View richlander's full-sized avatar

Rich Lander richlander

View GitHub Profile
@richlander
richlander / using-declaration.cs
Last active February 2, 2019 01:11
C# 8 Using Declaration
using System;
using System.Linq;
using System.Collections.Generic;
using static System.Console;
using System.IO;
namespace usingapp
{
class Program
{
@richlander
richlander / metdata-reading-example.cs
Created December 4, 2018 17:08
Assembly Metadata Reading with MetadataLoadContext Example
var paths = new string[] {@"C:\myapp\mscorlib.dll", @"C:\myapp\myapp.dll"};
var resolver = new PathAssemblyResolver(paths);
using (var lc = new MetadataLoadContext(resolver))
{
Assembly a = lc.LoadFromAssemblyName("myapp");
Type myInterface = a.GetType("MyApp.IPluginInterface");
foreach (Type t in a.GetTypes())
{
if (t.IsClass && myInterface.IsAssignableFrom(t))
Console.WriteLine($"Class {t.FullName} implements IPluginInterface");
@richlander
richlander / default-implementation-interfaces-example.cs
Created December 4, 2018 17:07
Default implementations of interface members Examples
interface ILogger
{
void Log(LogLevel level, string message);
void Log(Exception ex) => Log(LogLevel.Error, ex.ToString()); // New overload
}
class ConsoleLogger : ILogger
{
public void Log(LogLevel level, string message) { ... }
// Log(Exception) gets default implementation
}
@richlander
richlander / range-example.cs
Created December 4, 2018 17:05
Range Example
var slice = a[i1..i2]; // { 3, 4, 5 }
@richlander
richlander / index-example.cs
Created December 4, 2018 17:04
Index Example
Index i1 = 3; // number 3 from beginning
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"
@richlander
richlander / System.Buffers.SequenceReader-example.cs
Created December 4, 2018 16:58
System.Buffers.SequenceReader Example
private static ReadOnlySpan<byte> CRLF => new byte[] { (byte)'\r', (byte)'\n' };
public static void ReadLines(ReadOnlySequence<byte> sequence)
{
SequenceReader<byte> reader = new SequenceReader<byte>(sequence);
while (!reader.End)
{
if (!reader.TryReadToAny(out ReadOnlySpan<byte> line, CRLF, advancePastDelimiter:false))
{
@richlander
richlander / IAsyncEnumerable-example.cs
Created December 4, 2018 16:57
Using IAsyncEnumerable
async IAsyncEnumerable<int> GetBigResultsAsync()
{
await foreach (var result in GetResultsAsync())
{
if (result > 20) yield return result;
}
}
@richlander
richlander / Utf8JsonReaderLoop-Usage.cs
Created December 4, 2018 16:29
Example Utf8JsonReaderLoop Usage
public static void Utf8JsonReaderLoop(ReadOnlySpan<byte> dataUtf8)
{
var json = new Utf8JsonReader(dataUtf8, isFinalBlock: true, state: default);
while (json.Read())
{
JsonTokenType tokenType = json.TokenType;
ReadOnlySpan<byte> valueSpan = json.ValueSpan;
switch (tokenType)
{
@richlander
richlander / dotnet-tools.json
Created December 4, 2018 16:28
Example dotnet-tools.json
{
"version": 1,
"isRoot": true,
"tools": {
"dotnetsay": {
"version": "2.1.4",
"commands": [
"dotnetsay"
]
},
@richlander
richlander / dotnet-tools.json
Created December 4, 2018 16:25
Minimal dotnet-tools.json
{
"version": 1,
"isRoot": true,
"tools": {}
}