Операторы C#
В переменных типа значения хранятся данные, а в переменных ссылочного типа хранятся ссылки на фактические   данные. 
Ссылочные типы также называются объектами. 
Типы значений   состоят из двух основных категорий:
Структуры делятся на следующие категории:
-   Числовые типы
 -   bool
 - Структуры, определяемые пользователем.
 
Для объявления  ссылочных типов используются следующие ключевые слова:
В C# также предусмотрены следующие встроенные ссылочные типы:
Начиная с версии Visual C# 3.0 объявляемые в области метода переменные могут иметь неявный   тип var. 
Локальная переменная с неявным типом имеет строгую типизацию, как если бы тип был задан явно,   только тип определяет компилятор. 
Следующие два объявления i функционально   являются эквивалентами:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
  
Оператор if
bool   condition = true;
if   (condition)
{
    Console.WriteLine("The   variable is set to true.");
}
else
{
    Console.WriteLine("The   variable is set to false.");
}
Оператор switch 
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}
Цикл for
for (int i = 1; i <= 5; i++)
{
   Console.WriteLine(i);
}
  
Цикл foreach
int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibarray)
{
    System.Console.WriteLine(element);
}
System.Console.WriteLine();
В следующей таблице представлен список операторов C#, сгруппированных в порядке приоритета. 
Операторы в каждой группе имеют одинаковый приоритет.
Категория оператора 
 |   
Операторы 
 |   
Основные 
 |   |
Унарные 
 |   |
Мультипликативные 
 |   |
Аддитивные 
 |   |
Сдвиг 
 |   |
Относительные и тестирующие тип 
 |   |
Равенство 
 |   |
Логическое И 
 |   |
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ 
 |   |
Логическое ИЛИ 
 |   |
Условное И 
 |   |
Условное ИЛИ 
 |   |
Поддержка значения NULL 
 |   |
Условный оператор 
 |   |
Присвоение и лямбда-выражение 
 |   
Методы (Руководство по программированию на C#)
Метод представляет собой блок кода, содержащий набор инструкций. Программа   инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. 
В C# все инструкции выполняются в контексте метода. Метод   Main является точкой входа для каждого приложения C#, и вызывается он средой CLR при запуске программы.
  Сигнатуры   метода
Методы объявляются в классе или   в структуре путем   указания уровня доступа, например public или private,   необязательных модификаторов, например abstract или sealed,   возвращаемого значения, имени метода и списка параметров этого метода. 
Все вместе эти элементы образуют сигнатуру метода.
Передача параметров
В C# аргументы могут быть переданы параметрам либо по значению, либо по ссылке. Передача   по ссылке позволяет изменять и сохранять измененные значения параметров членов функций, методов, свойств, индексаторов, операторов и конструкторов в вызывающей среде. Для   передачи параметра по ссылке используйте ключевое слово ref или out. Для   простоты в этом примере используется только ключевое слово ref. 
static void SquareIt(int x)
// The parameter x is passed by value.
static void SquareIt(ref int x)
// The parameter x is passed by reference.
Неявно типизированные локальные переменные
// i is compiled as an int
var i = 5;
// s is compiled as a string
var s = "Hello";
// a is compiled as int[]
var a = new[] { 0, 1, 2 };
// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
from c in customers
where c.City == "London"
select c;
// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };
// list is compiled as List<int>
var list = new List<int>();
Ключевое слово var можно   использовать в следующих контекстах:
в локальных переменных (переменных, объявленных в области действия метода), как показано в предыдущем примере;
Методы расширения
Методы расширения позволяют "добавлять" методы в существующие типы без создания нового производного   типа, перекомпиляции или иного изменения исходного типа. Методы   расширения представляют собой особую разновидность статического метода, но вызываются так же, как методы экземпляра в расширенном типе. Для   клиентского кода, написанного на языках C# и Visual Basic, нет видимого различия между вызовом метода расширения и вызовом методов, фактически определенных в типе.
namespace ExtensionMethods
{
public static class MyExtensions
    {
public static int WordCount(this String str)
        {
return str.Split(new char[] { ' ', '.', '?' },
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}
Метод расширения WordCount можно   ввести в область действия с помощью следующей директивы using:
using ExtensionMethods;
Его можно вызвать из приложения с помощью следующего синтаксиса:
string s = "Hello Extension Methods";
int i = s.WordCount();
Именованные и необязательные аргументы
В Visual C# 2010 появились именованные и необязательные аргументы. Именованные   аргументы позволяют   указать аргумент для определенного параметра, связав аргумент с именем параметра, а не с позицией параметра в списке параметров.Необязательные   аргументы позволяют   опускать аргументы для некоторых параметров. Оба   подхода можно применять к методам, индексаторам, конструкторам и делегатам.
class NamedExample
{
static void Main(string[] args)
    {
// The method can be called in the normal way, by using positional arguments.
Console.WriteLine(CalculateBMI(123, 64));
// Named arguments can be supplied for the parameters in either order.
        Console.WriteLine(CalculateBMI(weight: 123, height: 64));
        Console.WriteLine(CalculateBMI(height: 64, weight: 123));
// Named arguments can follow positional arguments.
        Console.WriteLine(CalculateBMI(123, height: 64));
}
static int CalculateBMI(int weight, int height)
    {
return (weight * 703) / (height * height);
    }
}
  Методы   Async
Async с помощью функции можно вызывать асинхронные методы без использования явных обратных   вызовов или вручную разделить ваш код через несколько методов или лямбда-выражения. 
Функция Async была реализована в Visual Studio 2012.
  
// This Click event is marked with the async modifier.
private async void startButton_Click(object sender, RoutedEventArgs e)
{
await DoSomethingAsync();
}
  
private async Task DoSomethingAsync()
{
Task<int> delayTask = DelayAsync();
int result = await delayTask;
  
// The previous two statements may be combined into
// the following statement.
//int result = await DelayAsync();
  
Debug.WriteLine("Result: " + result);
}
  
private async Task<int> DelayAsync()
{
await Task.Delay(100);
return 5;
}
  
// Output:
// Result: 5
Полезный код
Преобразовать Base64 в файл
// данные из файла
 string xmlContent = File.ReadAllText(@"C:\Temp\Test.txt");// корневой элемент XML
 XElement newNode = XDocument.Parse(xmlContent).Root;// декодируем в байты строку base64
 byte[] base64 = System.Convert.FromBase64String(newNode.Value);// сохраняем в нужный формат
 File.WriteAllBytes(@"C:\Temp\test.zip", base64);