Skip to content

Instantly share code, notes, and snippets.

View controlflow's full-sized avatar

Alexander Shvedov controlflow

View GitHub Profile
public class OldSchoolPerson {
public string Name { get; set; }
public int Age { get; set; }
}
public class ModernPerson {
private string _name;
private int _age;
public ref string Name => ref _name;
using System;
class ArgListFun {
static void Main() {
var arg2 = 1;
string arg3;
var arg1 = M(__arglist(123, ref arg2, out arg3));
Console.WriteLine(arg1); // 123
Console.WriteLine(arg2); // 43
@controlflow
controlflow / foo1.cs
Created December 10, 2016 15:22
throw expression merge
if (x == null)
throw new ArgumentNullException(nameof(x));
return x;
// =>
return x ?? throw new ArgumentNullException(nameof(x));
[Pure, ContractAnnotation("null => null")]
public static IArrowExpressionClause GetArrowExpressionClause([CanBeNull] this IExpressionBodyOwnerDeclaration declaration)
{
var functionDeclaration = declaration as ICSharpFunctionDeclaration;
if (functionDeclaration != null) return functionDeclaration.ArrowExpression;
var propertyDeclaration = declaration as IPropertyDeclaration;
if (propertyDeclaration != null) return propertyDeclaration.ArrowExpression;
var indexerDeclaration = declaration as IIndexerDeclaration;
foreach (var referenceExpression in codeBody.ThisAndDescendants<IReferenceExpression>())
{
var resolveResult = referenceExpression.Reference.Resolve();
if (!resolveResult.ResolveErrorType.IsAcceptable) continue;
var declaredElement = resolveResult.Result.DeclaredElement;
var field = declaredElement as IField;
if (field != null)
{
IDeclaredElement declaredElement;
PsiLanguageType language;
Func<RenameIdentifierMarker, IDeclaredElementPointer<IDeclaredElement>> elementPointerFactory;
Func<string> newNameGetter;
IDeclaration declaration;
var nameRange = GetNameRangeByChange(change, out declaredElement, out declaration, out language,
out elementPointerFactory, out newNameGetter);
///////////////////////////////////////////////////////////////////////////////////////////////////////
private static void CheckUnsafeContext([NotNull] IAwaitExpression awaitExpression, [NotNull] IHighlightingConsumer consumer)
{
for (var localFunctionDeclaration = awaitExpression.GetContainingNode<ILocalFunctionDeclaration>();
localFunctionDeclaration != null;
localFunctionDeclaration = localFunctionDeclaration.GetContainingNode<ILocalFunctionDeclaration>())
{
if (localFunctionDeclaration.IsUnsafe)
{
consumer.AddHighlighting(new CannotAwaitInUnsafeContextError(awaitExpression));
return;
protected override IRearrangeable CreateElement(IMultipleDeclarationMember member)
{
IMultipleDeclaration parent = null;
string title = "declaration";
if (member is IFieldDeclaration)
{
parent = MultipleFieldDeclarationNavigator.GetByDeclarator((IFieldDeclaration)member);
title = "field";
}
using System;
public class C {
public void M() {
bool b;
if (b = true) { }
while (b = true) { }
public override string Text
{
get
{
if ((myValue == ConstantExpressionValue.TRUE &&
(ConditionalAndExpressionNavigator.GetByLeftOperand(myExpression) != null ||
ConditionalAndExpressionNavigator.GetByRightOperand(myExpression) != null))
||
(myValue == ConstantExpressionValue.FALSE &&
(ConditionalOrExpressionNavigator.GetByRightOperand(myExpression) != null ||