Skip to content

Instantly share code, notes, and snippets.

View dadhi's full-sized avatar
🎯
Focusing

Maksim Volkau dadhi

🎯
Focusing
View GitHub Profile
@dadhi
dadhi / DiscriminatedUnion3.cs
Created May 28, 2014 10:32
Liked this implementation of F# Discriminated Union in C# - http://stackoverflow.com/a/3199453/2492669
using System;
namespace Juliet
{
class Program
{
static void Main(string[] args)
{
Union3<int, char, string>[] unions = new Union3<int,char,string>[]
{
@dadhi
dadhi / ExtractNamesFromDelegate.cs
Created October 7, 2015 08:05
Extracts field, property, event or method name(s) from provided delegate using IL analysis
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Reflection.Emit;
namespace DryTools
{
public static class ExtractName
{
@dadhi
dadhi / TypeGetGenArgsVsTypeInfoGenTypeParsArgs.cs
Last active October 20, 2015 14:28
Compare Type.GetGenericArguments() with new reflection TypeInfo.GenericType[Arguments|Parameters]
public class D<T0, T1> { }
public class G<T0, T1> : D<int, T1> { }
[Test]
public void Get_generic_arguments_should_work_the_same_on_all_platforms()
{
// For generic type definition Type.GetGenArgs == TypeInfo.GenPars
var typeGenArgs = typeof(G<,>).GetGenericArguments();
var infoGenArgs = typeof(G<,>).GetTypeInfo().GenericTypeArguments;
var infoGenPars = typeof(G<,>).GetTypeInfo().GenericTypeParameters;
@dadhi
dadhi / FizzBuzz.LINQ.cs
Created June 25, 2013 07:01
FizzBuzz on C# as generic solution using LINQ.
[Test]
public void FizzBuzz()
{
var rules = new Dictionary<int, string> { { 3, "Fizz" }, { 5, "Buzz" } };
Func<int, string> translate = i =>
rules.Aggregate((string)null, (s, x) => i % x.Key == 0 ? (s == null ? x.Value : s + x.Value) : s)
?? i.ToString();
var words = Enumerable.Range(9, 7).Select(translate).ToArray();
CollectionAssert.AreEqual(new[] { "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz" }, words);
@dadhi
dadhi / FizzBuzz..OptionFold.fs
Created June 25, 2013 07:04
FizzBuzz on F# as generic solution.
let rules = [(3, "Fizz"); (5, "Buzz")]
let translate x =
None |> List.foldBack (fun (i, word) say ->
if x % i = 0 then Some <| Option.fold (+) word say
else say) rules
for n in 1..100 do
printfn "%s" <| match translate n with | Some s -> s | _ -> string n
using System;
using System.Linq;
using System.Threading;
using NUnit.Framework;
namespace Playground
{
[TestFixture]
public class RefTests
{
@dadhi
dadhi / MultimethodsWithDynamicTests
Last active January 13, 2016 10:48
Proof of concept and very simple Multimethods implementation, that uses dynamic keyword from .Net 4.0. Thanks goes to <http://blogs.msdn.com/b/laurionb/archive/2009/08/13/multimethods-in-c-4-0-with-dynamic.aspx>.
using NUnit.Framework;
using Microsoft.CSharp.RuntimeBinder;
namespace MultiMethodsWithDymanic
{
[TestFixture]
public class MultimethodsTests
{
[Test]
public void What_is_good_for_rabbit_is_not_good_for_wolf()
@dadhi
dadhi / DynamicMethodFromExpressionWithClosure.cs
Created February 15, 2016 12:52
DynamicMethodFromExpressionWithClosure
using System;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
var p = new Program();
var expr = p.GetNExpr();
@dadhi
dadhi / InjectListOfDepsWithStringDeps.cs
Created March 25, 2016 11:58
How in DryIoc InjectListOfDepsWithStringDeps
using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
namespace DryIoc.IssuesTests
{
[TestFixture]
public class InjectListOfDepsWithStringDeps
{
@dadhi
dadhi / Either.cs
Last active April 12, 2016 10:04
Take on minimal yet extensible approach to implementing Either/Or/DiscriminatedUnion
using System;
using System.Reflection;
using NUnit.Framework;
namespace Playground
{
[TestFixture]
public class EitherTests
{
[Test]