Skip to content

Instantly share code, notes, and snippets.

View Keboo's full-sized avatar

Kevin B Keboo

View GitHub Profile
@Keboo
Keboo / Person.cs
Last active March 12, 2019 06:05
AsyncLocal
public class Person
{
public string Name { get; set; }
}
@Keboo
Keboo / Explanation.md
Last active January 31, 2019 06:55
Property brain teaser

If you look up the docs for how assignment works you will see the explanation that a = b = c is evaluated like a = (b = c). The key is this line from the docs: "The result of a simple assignment expression is the value assigned to the left operand." In this case the result of the (b = c) expression is the value in c which is "John". This then assigns "John" into a.

@Keboo
Keboo / Output.txt
Last active October 19, 2018 15:23
Data driven unit test
Build started, please wait...
Build completed.
Test run for C:\Dev\unitTest\bin\Debug\netcoreapp2.1\unitTest.dll(.NETCoreApp,Version=v2.1)
Microsoft (R) Test Execution Command Line Tool Version 15.8.0
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
Total tests: 2. Passed: 2. Failed: 0. Skipped: 0.
@Keboo
Keboo / Program.cs
Created May 18, 2018 15:41
Replace explicit interface implementation.
//https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/interfaces#interface-implementation-inheritance
class Program
{
static void Main(string[] args)
{
IFoo @base = new Base();
IFoo derived = new Derived();
Console.WriteLine(@base.Bar()); //=> Base
@Keboo
Keboo / ExampleService.cs
Last active April 18, 2018 18:35
A simple result implementation using the null object pattern.
public class Service
{
public Result<Person> FindPerson(string query)
{
try
{
Person person = ...;
return person ?? Result.NotFound<Person>(); //Not strictly neccisary; the implicit operator will do a null check.
}
catch (Exception e)
@Keboo
Keboo / Test.cs
Created January 26, 2018 23:28
Optional FizzBuzz
public static void Main()
{
var obj = new Printer();
IFizz fizz = obj;
IBuzz buzz = obj;
IFizzBuzz fizzBuzz = obj;
for (int i = 0; i < 100; i++)
{
if (i % 15 == 0)
@Keboo
Keboo / MainWindow.xaml
Last active August 24, 2017 21:15
MDIX DialogHost example
<Window x:Class="Example.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
mc:Ignorable="d"
Background="{DynamicResource MaterialDesignPaper}"
Style="{StaticResource MaterialDesignWindow}"
@Keboo
Keboo / CompositeCommand.cs
Created August 3, 2017 15:44
Composite Commands in WPF
public class CompositeCommand : ICommand
{
public event EventHandler CanExecuteChanged;
private readonly IList<ICommand> _Commands;
public CompositeCommand(IList<ICommand> commands)
{
if (commands == null) throw new ArgumentNullException(nameof(commands));
_Commands = new List<ICommand>(commands);
@Keboo
Keboo / DrawerHost.xaml
Created May 17, 2017 17:29
An example left drawer that takes up space rather than overlaying the content using MDIX
<ControlTemplate TargetType="{x:Type local:MyDrawerHost}">
<Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="LeftDrawer">
<VisualStateGroup.Transitions>
<VisualTransition From="LeftDrawerClosed" To="LeftDrawerOpen">
<Storyboard>
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="PART_LeftDrawer">
<EasingThicknessKeyFrame Value="0" KeyTime="0:0:0.4">
<EasingThicknessKeyFrame.EasingFunction>
@Keboo
Keboo / MultiBinding.cs
Last active September 17, 2020 07:18
A simple MultiBinding class for Xamarin.Forms. This "binding" only works when directly applied to an element.
/*
WARNING: This MultiBinding implementation only works when it is directly applied to its target property.
It will fail if used inside of a setter (such is the case when used within a trigger or style).
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Runtime.CompilerServices;