Skip to content

Instantly share code, notes, and snippets.

View controlflow's full-sized avatar

Alexander Shvedov controlflow

View GitHub Profile
using System;
namespace JetBrains.Annotations
{
/// <summary>
/// Indicates that IEnumarable, passed as parameter, is not enumerated.
/// </summary>
[AttributeUsage(AttributeTargets.Parameter)]
public sealed class NoEnumerationAttribute : Attribute
{
class Foo {
readonly List<string> _names = new List<string>();
readonly SomeType _someType = new SomeType();
public Foo(string name) {
_names.Add(name);
_someType.SomeProperty = name;
}
}
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:9996185
Last active January 10, 2018 08:17
C# 6.0 null-safe member access/method/indexer call use cases
nullness inspection
{
a?.M();
a.F(); // <= possible NRE
a?.M(a != null); // <= expression always true
}
inspection "Redundant null-propagation"
{
var a = new A();
@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;