Як отримати дату на вчора

Використаємо метод DateTime.AddDays() із значеням -1

var yesterday = DateTime.Today.AddDays(-1);

Якщо сьогодні 10 версеня 2017, то отримаємо: {9/9/2017 12:00:00 AM}

Також можна застосувати

DateTime.Now.AddDays(-1)

Цикли

Мова програмування С# має чотири оператори, що дозволяють організовувати цикли: while, do, for, foreach

Мова програмування С# має чотири оператори, що дозволяють організовувати цикли, це while, do, for, foreach. Розглянемо ці оператори.  

Цикл while

While є найпростішим типом циклів. Розглянемо його синтаксис
    while (вираз) {
        ......
    }
    
Вираз в цьому операторі може приймати два значення – true або false. Цей оператор працює доти, доки вираз приймає значення true. На початку роботи цього оператора перевіряється умова, якщо умова істинна, то здійснюється перехід в середину оператора і виконується код, записаний у фігурних дужках, після чого здійснюється перехід на оператор while і знову перевіряється умова. Якщо умова хибна, то оператор припиняє виконання і керування передається команді, що йде після фігурних дужок оператора. Таким чином, якщо умова хибна ще на першому кроці, то код у дужках може ніколи не виконатись. Як і для оператора if, фігурні дужки можна опускати, якщо оператор повинен виконати в середині себе один рядок коду. Нижче наведено приклад програми з оператором while. Цей приклад видасть послідовність чисел від 0 до 4.
using System;
class StatementDemo05
{
    public static void Demo()
    {
        int i=0;
        while (i!=5)
        {
            Console. WriteLine(i);
            i++;
        }
    }
}
Цей же приклад можна записати по іншому:
class StatementDemo06
    {
        public static void Demo()
        {
            int i = 0;
            while (i != 5)
                Console.WriteLine(i++);
        }
    }
Цикли while можуть бути вкладеними, так, наведена нижче програма видасть на екран таблицю множення в стовпчик.
    class StatementDemo07
    {
        public static void Demo()
        {
            int i = 2;
            while (i != 10)
            {
                int j = 1;
                while (j != 10)
                    Console.WriteLine("{0}*{1}={2}", i, j, i * j++);
                i++;
            }
        }
    }

Оператор do

Наступним оператором, що організовує цикли, є оператор do. Він схожий на оператор while, тільки він перевіряє умову після виконання коду в середині оператора. Синтаксис оператора наведено нижче.
do
{
    ……
}
while(вираз);
З синтаксису оператора, бачимо, що він виконується на один раз більше, ніж while при тій же умові. Причому код всередині оператора буде виконано принаймні один раз. Розглянемо приклад, як і для оператора while.
class StatementDemo08
    {
        public static void Demo()
        {
            int i = 0;
            do
            {
                Console.WriteLine(i);
                i++;
            } while (i != 5);
        }
    }
У цьому прикладі на екран буде надруковано послідовність чисел від 0 до 5. 

Оператор for

Ще одним прикладом оператора, що організовує цикли, є оператор for. Цей оператор був присутній у всіх мовах програмування і на сьогодні він є найбільш вживаним оператором, що реалізує цикли. Розглянемо його синтаксис.
for(ініціалізація;вираз;зміна значення змінних )
{
   //……
}
У блоці ініціалізації оголошуються і встановлюються початкові значення змінних, які ми збираємося використовувати у циклі. Ця частина виконується один раз на початку роботи циклу. Цей блок може бути єдиним не порожнім блоком.
Друга частина – це вираз, який повертає логічне значення і обраховується кожен раз перед виконанням операторів в блоці for. Якщо цей вираз повертає значення false, то оператор for закінчує свою роботу.
     
Попередня програма аналогічна програмі для оператора while, яка видає цифри від 0 до 4, але змінна оголошується безпосередньо в операторі for. Оператор for з попереднього прикладу можна розширити, включивши в нього зміну значення змінної i.
Остання частина виконується одразу після всіх операторів в блоці for і призначена для зміни значень змінних, що приймають участь в умові. З урахуванням цього попередній приклад має вигляд:
    class StatementDemo09
    {
        public static void Demo()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(i);
            }
        }
    }


Оператор for легко виразити за допомогою оператора while.
ініціалізація
while(вираз)
{
……
оновлення змінних
}
Однак оператор for декому може здатися зручним, так як дозволяє зібрати розділені часті  оператора while разом (частина, поміщена у фігурні дужки). Крім того, кожен з трьох виразів (чи всі разом) в дужках можуть бути відсутні.
class StatementDemo10
    {
        public static void Demo()
        {
            var i = 0;
            for ( ;i < 10; )
            {
                Console.WriteLine(i++);
            }
        }
    }
Цей приклад повністю аналогічний наступному.
    class StatementDemo11
    {
        public static void Demo()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            }
        }
    }
Або з використанням оператора while програму можна записати і так:
class StatementDemo12
    {
        public static void Demo()
        {
            int i = 0;
            while (i < 10)
            {
                Console.WriteLine(i);
                i++;
            }
        }
    }
Головна відмінність оператора for полягає у можливості оголошувати змінні в блоці ініціалізації. До того ж  змінних одного типу ми можемо оголошувати декілька, перерахувавши їх через кому.
Змінна, оголошена в операторі for, вважається локальною для блока for, тому використовувати її поза цим блоком не вдасться і код нижче видасть помилку:
class StatementDemo13    
    {
        public static void Demo()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            }
            Console.WriteLine(i); //помилка компіляції
        }
    }

Структура switch

Розглянемо наступний оператор, що організовує розгалуження. Це оператор switch, який представляє з себе альтернативний спосіб опису умови if з перевіркою якогось виразу на різні значення.

Розглянемо наступний оператор, що організовує розгалуження. Це оператор switch, який представляє з себе альтернативний спосіб опису умови if з перевіркою якогось виразу на різні значення. Синтаксис цього оператора представлений нижче.

switch (вираз) {
    case значення1: ...... break;
    case значення2:
    case значенняЗ: ...... break;
    default: ...... break;
}

Під виразом розуміється будь-який вираз, який має цілий тип або тип даних char, enum чи string.
Цей оператор обчислює значення виразу і починає проходити по всіх мітках case, порівнюючи значення міток із значенням виразу.Якщо програма знайшла таку мітку, то виконуються всі оператори, які знаходяться після цієї мітки до оператора break, після якого здійснюється перехід в кінець оператора switch. У випадку, якщо мітка не знайдена, то перехід здійснюється на мітку default. Мітка default може бути відсутньою, тоді перехід здійснюється відразу в кінець оператора switch.

char temperature;
            //......
            switch (temperature)
            {
                case 'C': Console.WriteLine("Celsius"); break;
                case 'F': Console.WriteLine("Farenheit"); break;
                case 'K': Console.WriteLine("Kelvin"); break;
                default: Console.WriteLine("Unknown"); break;
            }

Якщо необхідно виконати один и той же блок коду для декількох значень, то для цього записують послідовність case виразів. В цьому випадку працює механізм відсутності оператора break, тобто в прикладі нижче, вирази приймають значення 'с', то перехід здійснюється на мітку case 'с':, але операторів після цієї мітки немає і немає оператора break, тому виконуються всі оператори підряд, тобто ті, що йдуть після мітки case 'С':

  char temperature;
            //......
            switch (temperature)
            {
                case 'c':
                case 'C': Console.WriteLine("Celsius"); break;
                case 'f':
                case 'F': Console.WriteLine("Farenheit"); break;
                case 'k':
                case 'K': Console.WriteLine("Kelvin"); break;
                default: Console.WriteLine("Unknown"); 
            }
        }


Зауважимо, що мітки, які вказані в case, повинні бути унікальними.
На відміну від інших мов програмування, у вас є можливість використовувати goto-оператор для переходу на інші мітки в операторі switch.   

switch (someChar)
{
    case 'a' ......
    goto case 'c';
    case 'b': ......
    break;
    case 'с': ......
    goto default;
    default:
        ......
    break;
}

 

Структури вибору

С# підтримує дві структури вибору, це конструкція if... та конструкція switch. Завдяки цим двом операторам можна реалізовувати розгалуження у наших програмах.

Умова if...

Розглянемо синтаксис цієї конструкції.

if(вираз)
{
……
//блок1
}
else
{
……
//блок 2
}

Вираз в дужках повертає значення або істина (true), або фальш (false), тобто значення типу boolean. Якщо вираз істинний, то виконуються оператори, які стоять в блоці 1, якщо вираз хибний, то виконуються оператори, що стоять в блоці 2.

Оператора if можна використовувати і без оператора else:

if(вираз)
{
……
//блок1
}

В цьому випадку виконуються оператори, що стоять в блоці 1, якщо вираз істинний; якщо вираз помилковий, то жоден з операторів блоку if не виконується.
Розглянемо приклад.

using System;
class StatementDemo01
{
    public static Main()
    {
        Console.WriteLine("Input first string:");
        string firstString=Conole.ReadLine();
        Console.WriteLine("Input second string:");
        string secondString=Console.ReadLine();
        if (firstString.Equals(secondString)) {
            Console.WriteLine("First string is equals second string");
        }
        else {
            Console.WriteLine ("First string is not equals second string");
        }
    }
}

Приклад, який приведений вище, демонструє роботу оператора if. Користувач вводить з клавіатури 2 рядки, і якщо вони рівні, то користувачу виводиться повідомлення про рівність цих рядків, інакше виводиться повідомлення про нерівність рядків.
У випадку, якщо в блоці if всього один рядок коду, то ви можете не вказувати фігурні дужки, хоча це і є поганим стилем програмування. Так, два приклади нижче еквівалентні:

//приклад 1
if(x==0) {
    х=х+10;
}
//приклад 2
if(x==0)
    х=х+10;

Якщо необхідно зробити вибір більш ніж між двома варіантами, то існує складніша версія умови if з множинним вибором. Для побудови таких конструкцій використовується вираз else if.

if (x<0) {
    х=х+10;
}
else if (x>10) {
    х=х-10;
    }
    else {
        х=5;
    }

В даному прикладі відбувається перевірка умови в першому if, і якщо умова істинна, то виконується код x=x+10, після чого здійснюється перехід на оператор, що йде за всім блоком if. У випадку, якщо перша умова помилкова, перевіряється умова в другому блоці if, і якщо воно повертає значення true, то виконується код х=х-10. Якщо жодна з умов не повернула значення true, то перехід здійснюється в блок else. Важливим є те, що після виконання операторів в одному з блоків оператора if програма переходить відразу на оператор, що йде за if, навіть якщо умови в нижчестоящих блоках цього оператора істинні.
Структури if можуть бути вкладені один в одного:

if (x<10) {
    if (y<5) {
        y=y+х;
        }
    else {
        у=у-х;
        }
}

Відзначимо, що на відміну від мови C++ тип int не приводиться автоматично до типу boolean, тому ми не можемо використовувати конструкцію, допустиму в C++:

int i=0;
  ……
if(i)  //помилка 
{
  ……
}

Таким чином, необхідно використовувати вирази, що повертають значення типу boolean, або перетворювати до цього типу явно.
У прикладах вище ми використовували тільки прості вирази у вигляді умов, насправді частіше доводиться комбінувати декілька виразів за допомогою логічних операторів.
Припустимо, що у нас є два вирази — X і У, які повертають значення типу boolean. Нижче приведена таблиця, яка показує, що відбуватиметься, якщо Ми почнемо комбінувати ці вирази за допомогою логічних операцій.

 

 X X&&Y  X||Y 
true  true   true   true  
true  alse  false true 
false true  false true
false false false false

Припустимо, нам необхідно перевірити, чи потрапляє змінна а в інтервал від -10 до 10. Для цього ми можемо написати наступний код, в якому ми використовуємо логічну операцію «і»:

using System;
class StatementDemo02
{
    static void Main() {
        double а;
        a=Convert.ToInt32 (Console.ReadLine ());
        if ((a>-10)&&(a<10)) {
            Console.WriteLine("а is in (-10;10)");
        }
        else {
            Console.WriteLine("а is not in (-10; 10)");
        }
    }
}

Припустимо, що ми хочемо перевірити, чи потрапляє а в інтервал, який не містить проміжок [-10;10].

using System;
class StatementDemo03 {
    static void Main()
    {
        double а;
        a=Convert.ToInt32(Console.ReadLine());
        if ((a<-10)||(a>10)) {
            Console.WriteLine("а is in (-10;10)");
        }
        else {
            Console.WriteLine("а is not in (-10;10)");
        }
    }
}

В даному прикладі ми використовували логічну операцію «або». Умови можуть бути значно складніше по своїй структурі.

Перетворення типів

У С# існують два варіанти приведення типів: явне приведення і неявне.

У С# існують два варіанти перетворення типів: явне приведення і неявне.

Неявне перетворення

Як і в інших мовах програмування, існує неявне приведення типів. Так, наприклад, якщо ви використовуєте вираз, який має тип int, а результат його ви хочете помістити в змінну типу double, то програма автоматично розширить вашу змінну до необхідного розміру, причому самі дані не будуть втрачені: 

using System;
class CastDemo 
{
    static void Main() 
    {
        int iValue=5; 
        double dValue; 
        dValue=iValue; // dValue набуде значення 5 
        Console.WriteLine ("dValue ={0} ",dValue);
    }
}

Явне перетворення

В деяких випадках ви можете спробувати присвоїти змінній більшого розміру змінну, що має тип, який займає менший розмір. Так, наприклад, присвоїти змінній типу int змінну типу double. В цьому випадку компілятор видасть помилку, якщо ви явно не вкажете тип, до якого ви хочете перетворити вашу змінну або вираз. Приклад нижче працювати не буде, оскільки неявне приведення типу double до типу int не може бути виконане.

using System;
class CastDemo2 
{ 
    static void Main() 
    { 
        double nVar1=6.489; 
        int nVar2=nVar1; 
        Console.WriteLine("nVar2={0}",nVar2); 
        } 
    } 
}

Однак існує також явне перетворення типів. Приклад нижче працювати буде, але в цьому випадку ви не застраховані від втрати даних.

using System;
class CastDemo3
{ 
    static void Main() 
    { 
        double nVar1=6.489; 
        int nVar2=(int)nVar1; 
        Console.WriteLine("nVar2={0}",nVar2); 
        } 
    } 
}

Результатом роботи цієї програми буде число 6. Таким чином, частина даних втрачена. Можна використовувати оператор checked для перевірки цілісності даних в змінних, і, у разі втрати інформації, викидуватиметься виключення.

using System;
class CastDemo4 
{ 
    static void Main() 
    { 
        double nVar1=6.489; 
        checked { 
            int nVar2=(int) nVar1; 
            Console.WriteLine("nVar2={0}",nVar2); 
        } 
    } 
}

 

Структури

Ми можемо об&#39;єднувати змінні різних простих типів в групи, тим самим створюючи власний тип, що складається з набору простих. Такий, призначений для користувача, тип носить назву структури.

Ми можемо об'єднувати змінні різних простих типів в групи, тим самим створюючи власний тип, що складається з набору простих. Такий, призначений для користувача, тип носить назву структури.

Нижче приведений приклад визначення структури.

public struct Book {
    public string title; 
    public string author; 
    public decimal price; 
}

У прикладі, наведеному вище, визначається новий тип даних, який називається Book, цей тип містить три елементи, що представляють з себе змінні елементарних типів. Перші два елементи є рядковими змінними і призначені для зберігання назви книги та прізвища (а також імені чи ініціалів) автора, а третій елемент є змінною типу decimal для зберігання ціни.

Оголошення структури дуже схоже на оголошення еnum, але елементами структури можуть бути змінні будь-яких типів, крім того, елементи структури не можуть бути константами.
Розглянемо, яким чином ведеться робота з типом Book. Нижче наведено приклад, що демонструє, яким чином визначається змінна структурного типу, ініціалізується і використовується.

using System;
class StructTest
{
    static void Main()
    {
        Book book;
        book.title = Console.ReadLine();
        book.author = Console.ReadLine();
        book.price = 240;
        Console.WriteLine("We have book {0} written by {1}", book.title, book.author);
        Console.WriteLine("This book cost: {0}", book.price);
    }
}

 

Поняття про .NET

Під .NET будемо розуміти модель, розроблену Microsoft, в рамках якої програмне забезпечення стає незалежним від платформи і апаратного забезпечення. Причому ця модель орієнтована на роботу через Інтернет.

Під .NET будемо розуміти модель, розроблену Microsoft, в рамках якої програмне забезпечення стає незалежним від платформи і апаратного забезпечення. Причому ця модель орієнтована на роботу через Інтернет.
Однією з переваг .NET є те, що за допомогою різних мов .NET програмісти можуть легко обмінюватися своїм кодом. Наприклад, C# програміст може використовувати код, написаний іншим програміст VB.NET, Managed C++ або F#. Така можливість для програм, написаних на різних мовах .NET, забезпечується через використання загальної системи типів даних (Common Type System), використання єдиної інфраструктури виконання та єдиного формату скомпільованого коду (assembly).
Великою перевагою .NET технології є можливість запуску коду, який написаний і скомпільований лише один раз, для різних операційних систем і апаратних пристроїв. Ми можемо скомпілювати програму C# у середовищі Windows і потім виконати його під Windows, Windows Mobile, Windows RT або Linux. Офіційно Майкрософт підтримує тільки .NET Framework з Windows, Windows Mobile і Windows Phone, але є сторонні постачальники, які пропонують .NET реалізації інших операційних систем.
Платформа .NET містить мову C #, CLR та багато допоміжних інструментів та бібліотек, готових до використання. Існує декілька версій .NET відповідно до цільової групи користувачів:
- .NET Framework є найпоширенішою версією середовища .NET, оскільки вона маж загальне призначення. Вона використовується при розробці консольних застосунків, застосунків Windows з графічним інтерфейсо�� користувача, веб-застосунків та багато іншого.
- .NET Compact Framework (CF) є "легкою" версією стандартної .NET Framework і використовується при розробці застосунків для мобільних телефонів та інших пристроїв КПК за допомогою Windows Mobile Edition.
- Silverlight також є "легкою" версією .NET Framework, яка призначена для виконання у веб-переглядачах для впровадження мультимедійних і багатих Інтернет-застосунків.
- .NET для застосунків Windows Store є підмножиною .NET Framework, призначеної для розробки та виконання застосунків .NET у середовищах Windows 8 та Windows RT (так звані застосунки Windows Store).

У 2014 р. компанія Microsoft анонсувала платформу .NET Core.

.NET Core - це модульна реалізація, яка може використовуватися у різноманітних вертикальних системах, від центів обробки даних до мобільних пристроїв. Вона доступна як відкритий код, і підтримується Microsoft на Windows, Linux та Mac OSX.

 

Оператори у C#

Оператори дозволяють обробляти прості типи даних і об&#39;єкти. Вони отримують в якості вхідного один або більше операндів і повертають деяке значення як результат.
Кожна мова програмування використовує оператори, через яких ми можемо виконувати різні дії над даними. Розглянемо оператори в C# і спробуємо розібратися для чого вони потрібні і як вони використовуються.

Що таке оператор?

Після того, як ми дізналися, як оголошувати і встановлювати змінні ми розповімо про те, як виконувати різні операції з ними. Для цієї мети ми будемо знайомитися з операторами.
Оператори дозволяють обробляти прості типи даних і об'єкти. Вони отримують в якості вхідного один або більше операндів і повертають деяке значення як результат.
Оператори в C# є спеціальними символами (такі як "+", ".", "^", і т. д.) і вони виконують перетворення над одним, двома або трьома операндами. Прикладами операторів C# є математичні знаки додавання, віднімання, множення і ділення (+, -, *, /) і відповідні операції, які вони виконують на цілими і дійсними числами. 

Оператори в C#

 
Оператори в C# можна поділити на декілька різних категорій: 
  • Арифметичні оператори – так як і в математиці, служать для виконання простих арифметичних операцій.
  • Оператори присвоювання – дозволяють присвоювання значень змінних.
  • Оператори порівняння – дають можливість порівняти два літерала та/або змінних.
  • Логічні оператори – оператори для роботи з логічними типами даних та логічними виразами.
  • Побітові (бітові) оператори використовуються для виконання операцій на двійковим представлення числових даних.
  • Оператори перетворення типів – дозволяють перетворення даних з одного типу в інший.

Категорії операторів

Далі подано список операторів за категоріями:

Категорії

Оператори

Арифметичні

-, +, *, /, %

Інкремент (декремент)

++, --

Логічні

&&, ||, !, ^

Бітові

&, |, ^, ~, <<, >>

Порівняння

==,!=, >, <, >=, <=

Присвоєння

=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Об’єднання рядків

+ (конкатенація)

Перетворення типів

(type), as, is, typeof, sizeof

Індексні, лямбда-числення, інші

[],=>,., new, (), [], ?:, ??

Класифікація операторів за числу аргументів

Оператори також поділяються за числом аргументів

Тип оператора исло аргументів)

Приклади

Первинні (постфіксні)

Math.Abs(x)-виклик методу

Унарний, один

-x, y++, !x

Бінарний, два

x+y, x>y, x&&y

Тернарний, три

(a>b) ? c : d

 

Усі бінарні оператори в C# є лівоасоціативним, тобто вирази обчислюються зліва направо, за винятком операторів присвоювання. Всі оператори присвоювання та умовні оператори ?: і ?? є правоасоціативними, тобто вирази обчислюються справа наліво. Унарні оператори не є асоціативними.

В залежності від типів даних, над якими виконується дія, знаки операторів мають різний сенс. Класичним прикладом у цьому випадку є оператори + та /.

Приклад

double result = (2+3)/2;
string greetings = "Hello ";
string company = "Microsoft!";
Console.WriteLine("{0} {1}", result, greetings + company );

У цьому прикладі знак + виконує додавання для чисел і конкатенацію для рядків, а знак / виконує цілочисельне ділення і результат буде 2, а не 2.5.

Приорітет операцій у C#

Деякі оператори мають перевагу (пріоритет) над іншими. Наприклад, в математиці множення має пріоритет над додаванням. Оператори з вищим пріоритетом обчислюються раніше тих, що мають нижчий пріоритет. Оператор ()  використовується, щоб змінити пріоритет, і, як в математиці, його вміст обчислюється в першу чергу.

У наступній таблиці подано пріоритети операцій від найвищого до найнижчого:

Категорія

Оператори

Первинні

x.y  f(x)  a[x]  x++  x--  new typeof  checked  unchecked

Унарні

+  -  !  ~  ++x  --x  (T)x

Мультиплікативні

*  /  %

Аддитивні

+  -

Зсуву

<<  >>

Відношення і визначення типу

<  >  <=  >=  is  as

Рівності

==  !=

Логічне AND

&

Логічне XOR

^

Логічне OR

|

Умовне AND

&&

Умовне OR

||

Умовне

?:

Присвоєння

=  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=

 

Оператори, розташовані у верхній частині таблиці, мають вищий пріоритет, ніж ті, що подно нижче, і, відповідно, вони мають перевагу в обчисленні виразу. Щоб змінити пріоритет оператора ми можемо використовувати дужки.

Арифметичні оператори.

Арифметичні оператори в C# +, -, * такі ж, як у математиці. Вони виконують додавання, віднімання та множення числових значень і результат також числове значення.

Оператор ділення має різний вплив на цілі і дійсні числа. Коли ми ділимо ціле на ціле число (наприклад, int, long і sbyte) результуюче значення є також цілим числом (без округлення дробової частини). Нагадаємо, що таке ділення називається цілочисельним. Приклад цілочисельного ділення: 7 / 3 = 2.

Цілочисельне ділення на 0 не допускається і призводить до виникнення виняткової ситуації під час виконання програми (runtime exception) DivideByZeroException. Остачу від ділення цілих чисел можна отримати оператором %.

Наприклад, 7 % 3 = 1, і -10 % 2 = 0.

 

При діленні двох дійсних чисел або двох чисел, одне з яких є дійсним (наприклад, float, double, і т. д.), результат буде дійсним числом з цілою і дробовою частиною. Наприклад: 5.0 / 2 = 2.5. У діапазоні дійсних чисел допускається ділення на 0.0 і відповідно результат +∞ (нескінченність), -∞ (нескінченності) або NaN (неприпустиме значення, Not a Number).

Оператор інкременту ++ додає одиницю до значення змінної, відповідно оператор декременту -- віднімає одиницю значення. Для даних операторів існує префіксна і постфіксна (суфіксна) форма.

Коли ми використовуємо оператори ++ і – як префікс, то спочатку обчислюється нове значення, а потім повертається результат. При постфіксній(суфіксній) формі спочатку повертається початкове значення операнда, а потім виконуєтся дія додавання або віднімання.

Приклад.

namespace ConsoleProgram
{
   class Program
   {
       static void Main(string[] args)
       {
           double totalCost = 120;
           int quantityOfBooks = 50;
           double averageBookPrice = totalCost / quantityOfBooks;
           double halfOfTotalCost = 1/2 * totalCost;

           Console.WriteLine(averageBookPrice); // 2.5
           Console.WriteLine(halfOfTotalCost); // 0

           halfOfTotalCost = totalCost * 1 / 2 ;

           Console.WriteLine(halfOfTotalCost); // 60

           int numberA = 12;
           int numberB = 5;

           Console.WriteLine(numberA + numberB);     // 17
           Console.WriteLine(numberA + (numberB++)); // 17
           Console.WriteLine(numberA + numberB);     // 18
           Console.WriteLine(numberA + (++numberB)); // 19
           Console.WriteLine(numberA + numberB);     // 19
           Console.WriteLine(24 / numberA);     // 2
           Console.WriteLine(24 % numberB);     // 4

           numberA = 1;
           numberB = 0;
           // Console.WriteLine(one / zero); // DivideByZeroException

           double zero = 0.0;
           Console.WriteLine("{0} / {1} = {2}", zero, zero, zero / zero);
 
           double dZero = 0.0;
           Console.WriteLine(-1.0 / zero); // -Infinity
           Console.WriteLine(1.0 / dZero); // Infinity
       }
}