Skip to content

Instantly share code, notes, and snippets.

@badmotorfinger
badmotorfinger / JoinedStreamReader.cs
Created October 30, 2011 00:18
A collection of streams that can be read as one continuous stream
namespace Mvc.ResourceLoader.Util {
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
public class JoinedStreamReader : Stream {
@badmotorfinger
badmotorfinger / json-pretty
Created July 29, 2014 05:26
A compact JSON beautifier
// Highly compact JSON beautifier/formatter. Not very efficient and could definitely be improved. The main issue is with
// the number of allocations and memory presure being placed on the heap and garbage collector if the input is large.
// It is the shortest in terms of code size though.
// Source: http://stackoverflow.com/questions/4580397/json-formatter-in-c/24782322#24782322
private const string INDENT_STRING = " ";
static string FormatJson(string json) {
int indentation = 0;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
namespace Bleroy.Helpers {
public static class NotNull {
public static TProp Get<TSource, TProp>(this TSource source, Expression<Func<TSource, TProp>> property) where TSource : class {
if (source == null) return default(TProp);
var current = property.Body;
@badmotorfinger
badmotorfinger / SelectMany God
Last active August 29, 2015 13:58
Using the SelectMany() God function.
void Main()
{
// An implementation of the Where method using the SelectMany() method.
TestWhere();
// An implementation of Join using the SelectMany() method.
TestJoin();
}
public static IEnumerable<T> Where<T>(IEnumerable<T> stuffs, Func<T, bool> predicate)
@badmotorfinger
badmotorfinger / gist:9618765
Last active August 29, 2015 13:57
Use LINQ query expressions without requiring IEnumerables, to compose functions.
// Full credit goes to Wes Dyer http://blogs.msdn.com/b/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx
// Explanation of how query expressions are translated in to extension method syntax.
public class Identity<T>
{
public T Value { get; private set; }
public Identity(T value) { this.Value = value; }
public static implicit operator Identity<T>(T value) {
return new Identity<T>(value);