Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View controlflow's full-sized avatar

Alexander Shvedov controlflow

View GitHub Profile
sealed class ArrayPart : Part
{
readonly int myArrayLength;
readonly object[] myArray;
int myItemIndex;
public ArrayPart(int arrayLength)
{
myArray = new object[arrayLength];
myArrayLength = arrayLength;
@controlflow
controlflow / gist:9996665
Last active August 29, 2015 13:58
Possible C# primary constructors design
class Person : EntityBase {
// ~familiar syntax, no problems with xml doc, can omit body, can omit public?
public constructor(int id, string name, int age) : base(id);
readonly string _mrName = "Mr. " + name;
public string Name { get; } = name;
public int Age { get; } = age;
}
@controlflow
controlflow / gist:11d6360ea827164aaa1e
Last active August 29, 2015 14:01
C# 6.0 declaration expressions
// CA "To declaration statement"
{
var t = F(out var x);
// =>
int x;
var t = F(out x);
}
@controlflow
controlflow / gist:de10836191593eee1744
Created September 20, 2014 21:40
Null propagation playground
convert "Null-conditional invocation" {
if (x != null) { // also 'cond && x != null'
x.M();
}
} into {
x?.M();
}
convert "Null-conditional invocation (inverted)" {
@controlflow
controlflow / gist:b67376a4b7fda8a3be37
Created September 30, 2014 17:19
Simple BF interpreter in Haskell
import Data.Char(ord, chr)
data Tape = Tape [Int] Int [Int]
deriving Show
getTape :: [Int] -> Tape
getTape (x:xs) = Tape [] x xs
getTape [] = Tape [] 0 []
modify :: (Int -> Int) -> Tape -> Tape
@controlflow
controlflow / gist:4d4c7f0c5527dc055d07
Last active August 29, 2015 14:07
Simple pure BF interpreter
import Data.Char(ord, chr)
data Tape = Tape [Int] Int [Int]
deriving Show
getTape :: [Int] -> Tape
getTape (x:xs) = Tape [] x xs
getTape [] = Tape [] 0 []
modify :: (Int -> Int) -> Tape -> Tape
[DebuggerDisplay("Person(Name={" + nameof(Name) + ",nq}, Age={" + nameof(Age) + ",nq})")]
// vs.
[DebuggerDisplay($"Person(Name={{{ nameof(Name) },nq}}, Age={{{ nameof(Age) },nq})")]
class Person {
public string Name { get; }
public int Age { get; }
public Person(string name, int age) {
this.Name = name;
this.Age = age;
@controlflow
controlflow / ReflectionTypeVisitor.cs
Last active August 29, 2015 14:25
Simple System.Type visitor to traverse and replace types
using System;
using JetBrains.Annotations;
namespace Smth {
[PublicAPI]
public abstract class ReflectionTypeVisitor<T> {
public virtual T VisitSimpleType(Type type) => default(T);
public virtual T VisitConstructedType([NotNull] Type typeDefinition, [NotNull] Type[] typeArguments) => default(T);
public virtual T VisitTypeParameterType([NotNull] Type typeParameter) => default(T);
public virtual T VisitArrayType([NotNull] Type arrayType) => default(T);
using System;
using System.Collections.Generic;
using System.ComponentModel;
using JetBrains.Annotations;
namespace JetBrains.VsIntegration.ProjectModel.PropertiesExtender
{
public sealed class AggregatedPropertyDescriptor : PropertyDescriptor
{
[NotNull] private readonly IList<PropertyDescriptor> myPropertyDescriptors;
class Foo {
[ProvidesContext] IPredefinedType _predefinedTypes = ...;
void DoSomething(ITreeNode node) {
if (Check(node)) {
var expressionType = node.GetExpressionType();
if (expressionType.Equals(node.GetPredefinedType().Bool) {
// ^^^^^^^^^^^^^^^^^^^^^^^^
// Use aleady provided 'IPredefinedType' value from '_predefinedTypes' field
}