Skip to content

borisdj/CsCodeExample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CsCodeExample

Examples of c# code in form of a simple tutorial. Containing:

  • Console Output
  • Variables
  • Declaration
  • Arithmetic Operators
  • Selection Statements
  • Iteration Statements
  • Arrays and Lists
  • Parsing and Exceptions
  • Functions
  • Enum
  • Classes
  • Console Input
  • File Read & Write

Logo:

Contributing

If you find this project useful you can mark it by leaving a Github *Star.

Please read CONTRIBUTING for details on code of conduct, and the process for submitting pull requests.
NuGet
Want to Contact us for Development & Consulting: www.codis.tech

Also take a look into others packages:
-Open source (MIT or cFOSS) authored .Net libraries (@Infopedia.io personal blog post)

.Net library Description
1 EFCore.BulkExtensions EF Core Bulk CRUD Ops (Flagship Lib)
2 EFCore.UtilExtensions EF Core Custom Annotations and AuditInfo
3 EFCore.FluentApiToAnnotation Converting FluentApi configuration to Annotations
4 FixedWidthParserWriter Reading & Writing fixed-width/flat data files
5 CsCodeGenerator C# code generation based on Classes and elements
6* CsCodeExample Examples of C# code in form of a simple tutorial

Naming Conventions

Local variables - nonCapitalLetter, camelCase.
Class, Function (Method - in a class) and Property name - CapitalLetter, PascalCase.
DO choose easy readable identifier (eg. HorizontalAlignment more English-readable than AlignmentHorizontal).
DO favor readability over brevity (property CanScrollHorizontally better than ScrollableX (obscure X-axis ref).
DO NOT use underscores (Hungarian notation), hyphens, or any other nonalphanumeric characters.
AVOID using identifiers that conflict with keywords of widely used programming languages.

Programming Principles:

DRY - Don't Repeat Yourself
YAGNI - You Aren't Gonna Need It (but have as much as you can out of the box)
KISS - Keep it Simple, Stupid - Kelly Johnson
"Good design is as little design as possible." - Dieter Rams
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
"Complexity is your enemy. Any fool can make something complicated. It's hard to keep things simple."-Richard Branson
"Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple." - Steve Jobs
"I have made this letter longer than usual, only because I have not had the time to make it shorter." - Blaise Pascal
"I have just three things to teach: simplicity, patience, compassion. These three are your greatest treasures." - Lao Tzu

LoD - Law of Demeter or principle of least knowledge
SoC - Separation of Concerns; Layers: presentation, business(service), DAL - data access layer, DB - database
DDD - Domain Driven Design
_ RP - Repository Pattern msdn/TheRepoPattern (allows dependency injection and unit test for EF)
_ DI - Dependecy Injection (IoC - Inversion of Control), loosely-coupled
PRG pattern - Post/Redirect/Get
GRASP - General Responsibility Assignment Software Patterns

OOP - Object Oriented Programming
SOLID (object-oriented design) SolidInPictures:
[S] SRP - Single Responsibility Principle (a class should have only a single responsibility)
[O] OCP - Open/Closed Principle (entities[class, function,..] to be open for extension, closed for modification)
[L] LSP - Liskov Substitution Principle (objects replaceable with subtypes instances without altering correctness)
[I] ISP - Interface Segregation Principle (many client-specific interfaces are better than one general-purpose interface)
[D] DIP - Dependency Inversion Principle (Depend upon abstractions, not upon concretions, Dependency injection)

CODE:

// - LINE COMMENT

/*
SEGMENT COMMENT
*/

// break point(F5, F10), refactor, search and replace, Go to def., Find all ref., (un)comment

#region MyRegion
// your collapsible code here
#endregion

#region Output
Console.Write("OUTPUT:");
Console.WriteLine("Program is running.");

Console.WriteLine();
#endregion

#region Variables
// VARIABLES (local - must be assigned)
// primitive(built in) type / object (value range)
/*
bool    / Boolean   (true, false)                   [default: false]
byte    / Int8      (+- 127)                        [default: 0]
short   / Int16     (+- 32,767)                     [default: 0]
int     / Int32     (+- 2,147,483,647)              [default: 0]
long    / Int64     (+- 9,223,372,036,854,775,807)  [default: 0]
float               (+- 1.5 E−45 to +- 3.40282347 E+38)            [default: 0]  Precision: ~6-9 digits
double              (+- 5.0 E−324 to +- 1.7976931348623157 E+308)  [default: 0]  Precision: ~15-17 digits
decimal / Decimal   (+- 1.0 E-28 to +- 7.9228 E28)                 [default: 0]  Precision: 28-29 digits
char    / Char                                      [default: '']
string  / String                                    [default: null, nullable]
var // can be any type
*/
#endregion

#region Naming Conventions
/*
local variables - nonCapitalLetter, camelCase
Class, Function(Method - in a class) and Property name - CapitalLetter, PascalCase
DO choose easily readable identifier names(exmample HorizontalAlignment more English-readable than AlignmentHorizontal)
DO favor readability over brevity.
The property name CanScrollHorizontally is better than ScrollableX (an obscure reference to the X-axis).
DO NOT use underscores(Hungarian notation), hyphens, or any other nonalphanumeric characters.
AVOID using identifiers that conflict with keywords of widely used programming languages.
*/
#endregion

#region Declaration
// Declaration of variable (camelCase Notation)
bool isAdmin;
int counter;
double sum;
decimal number;
char character;
string name;

// Assignment of variable
isAdmin = true;
counter = 5;
sum = 3.14;
number = 18.65m;
character = 'a';

name = "Ben Benito";

Console.WriteLine("c" + counter);

// Declaration and Assignment
bool isActive = true;

// Nullable (can take all values of its underlying value type and an additional null value)
bool? isEnded = null;
string city = null;
// String is null (and therefore nullable) by default, so there's no need for this notation)

// Cast
int inputAmount = 126;
decimal secondAmount = inputAmount; // implicit cast
int thirdAmount = (int)secondAmount; // explicit cast
string strNum = "1234";
int outputNum = int.Parse(strNum);

Console.WriteLine("DECLARATION");
Console.WriteLine("T or F: " + isAdmin);
Console.WriteLine("Counter: " + counter);
Console.WriteLine("Sum: " + sum);
Console.WriteLine("Number: " + number);
Console.WriteLine("Letter: " + character);
Console.WriteLine("Word or Sentance: " + name);
Console.WriteLine("Active: " + isActive);
Console.WriteLine("Finished: " + isEnded);

// string interpolation
Console.WriteLine("City Name: " + city); // Old way to concatenate strings
Console.WriteLine("City Name: {0}", city);
Console.WriteLine($"City Name: {city}"); // Newest way, from C# 6 version

Console.WriteLine();
#endregion

#region Operators
// Arithmetic Operators
// = + - * / %
int x = 10, y = 6; // Declaration and assignment of multiple variables of the same type at once
int result = x + y;

Console.WriteLine("OPERATORS");
Console.WriteLine("a + b = " + x + " + " + y + " = " + result);
Console.WriteLine("a + b = {0} + {1} = {2}", x, y, result);
Console.WriteLine($"a + b = {x} + {y} = {result}");

x *= 2;
//x = x * 2;

x++;
//x = x + 1;

//x--;
//x = x - 1;

Console.WriteLine("x = x * 2 + 1 = " + x);
Console.WriteLine("r = x++ = " + x++); // output is the value of x BEFORE incrementing
Console.WriteLine("x= " + x);
Console.WriteLine("r = ++x = " + ++x); // output is the value of x AFTER incrementing
Console.WriteLine("x = " + x);
Console.WriteLine("");

// Relation Operators
// == !=  > >= < <=

// Logical Operators
// && AND
// || OR
// !  NOT
#endregion

#region Selection Statements (Conditionals)
Console.WriteLine("SELECTION STATEMENTS (Conditionals)");
// if, else, switch, case

bool print = true;

if (print)
	Console.WriteLine("true - ");

print = false;

if (print)
	Console.WriteLine("false - no output");

if (!print)
	Console.WriteLine("not false = true - output");

int age = 20;
if (age > 18)
	Console.WriteLine("Adult");
else
	Console.WriteLine("Minor");

int value = 23; // value range 0-29
string clause = "Value is from-to: ";

if (value >= 0 && value < 10)
	Console.WriteLine(clause + "0-9");
else if (value >= 10 && value < 20)
	Console.WriteLine(clause + "10-19");
else if (value >= 20 && value < 30)
	Console.WriteLine(clause + "20-29");
else
	Console.WriteLine(clause + "30+");


int mod = value % 3;

if (mod == 1)
	Console.WriteLine("Remainder 1");
else if (mod == 2)
	Console.WriteLine("Remainder 2");
else
	Console.WriteLine("Divisible with 3");

switch (mod)
{
	case 1:
		Console.WriteLine("Remainder 1");
		break;
	case 2:
		Console.WriteLine("Remainder 2");
		break;
	default:
		Console.WriteLine("Divisible with 3");
		break;
}

int? year = null;
// null coalescing operator (??) - returns the value of its left-hand operand if it isn't null; otherwise, it evaluates the right-hand operand and returns its result
Console.WriteLine("Year = " + (year ?? 2017)); // returns 2017, as year == null

string yearType = year % 2 == 0 ? "Even year" : "Odd year"; // (? :) - conditional operator, ternary
// General case:  result = condition ? result if condition is true : result if condition is false;
Console.WriteLine("Year type :" + yearType);

#endregion

#region Iteration Statements
Console.WriteLine("ITERATION STATEMENTS");
// for, while, do, foreach, in

// Jump statements
// break, continue, default, return, (go to)

// Exception handling statements
// throw, try-catch


Console.Write("For loop: ");

for (int i = 1; i <= 5; i++)
	Console.Write(i + " ");

Console.WriteLine("");
Console.Write("While a): ");
// Do - while loop, executes at least once, even if the condition is not fulfilled
int k = 40;
do
{
	k = k * 2;
	Console.Write(k + " ");
} while (k < 20);

Console.WriteLine("");
Console.Write("While b): ");
k = 1;
while (k < 20)
{
	k = k * 2;
	if (k == 8)
		break;
	Console.Write(k + " ");
}

Console.WriteLine("");
Console.Write("While c): ");
k = 1;
while (k < 20)
{
	k = k * 2;
	if (k == 8)
		continue;
	Console.Write(k + " ");
}

Console.Write("\n\n");
#endregion

#region Arrays
Console.WriteLine("ARRAYS");

double[] fiveDayPrices = new double[5]; // fixed size;
fiveDayPrices[0] = 3.45;
fiveDayPrices[1] = 3.55;
fiveDayPrices[2] = 3.58;
fiveDayPrices[3] = 3.30;
fiveDayPrices[4] = 3.32;

Console.Write("Five day prices: ");
for (int i = 0; i < 5; i++)
{
	Console.Write(fiveDayPrices[i] + " ");
}

Console.Write("\nFive day prices backwards: ");
for (int i = fiveDayPrices.Length - 1; i >= 0; i--)
{
	Console.Write(fiveDayPrices[i] + " ");
}

Console.Write("\nForeach: ");
foreach (var element in fiveDayPrices)
{
	Console.Write(element + " ");
}

Console.WriteLine("");

Console.WriteLine("Matrix");
// Multidimensional arrays
// Two-dimensional array. 
int[,] matrix = new int[3, 3]; // fixed size;

matrix[0, 0] = 1;
matrix[0, 1] = 2;
matrix[0, 2] = 3;
matrix[1, 0] = 4;
matrix[1, 1] = 5;
matrix[1, 2] = 6;
matrix[2, 0] = 7;
matrix[2, 1] = 8;
matrix[2, 2] = 9;

for (int i = 0; i < 3; i++)
	for (int j = 0; j < 3; j++)
		Console.Write(matrix[i, j] + " ");

Console.WriteLine();

int[,] matrixB = new int[3, 3]; // fixed size;

for (int i = 0; i < 3; i++)
{
	for (int j = 0; j < 3; j++)
	{
		matrixB[i, j] = (i * 3) + j + 1;
		Console.Write(matrixB[i, j] + " ");
		if ((j + 1) % 3 == 0)
			Console.WriteLine("");
	}
}

// A similar array with string elements. 
string[,] array2Db = new string[3, 2] { { "one", "two" }, { "three", "four" }, { "five", "six" } };

// Three-dimensional array. 
int[,,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };


Console.WriteLine("Dif. Matrix");
// Array(Jagged) that can have different row size

// This could be clarified!
int[][] jaggedArray = new int[3][];
for (int i = 0; i < 3; i++)
{
	jaggedArray[i] = new int[(i + 1)];
	for (int j = 0; j < (i + 1); j++)
	{
		jaggedArray[i] = new int[(i + 1)];
		jaggedArray[i][j] = (i * 3) + j + 1;
		Console.Write(jaggedArray[i][j] + " ");
		if ((j + 1) % (i + 1) == 0)
			Console.WriteLine("");
	}
}

// List
List<string> words = new List<string>
{
	"one",
	"two",
	"three",
};
words.Add("four");
words.Add("five");
words.Remove("three");

Console.WriteLine("");
foreach (var word in words)
	Console.Write(word + " ");

Console.WriteLine("\n" + words[1]);
Console.WriteLine(words.ElementAt(1));

List<char> letters = new List<char>() { 'a', 'b', 'c' };

foreach (var letter in letters)
{
	Console.Write(letter + " ");
}
// Dictionary
Dictionary<String, int> accounts = new Dictionary<String, int>
{
	{ "Cash", 110 },
	{ "Receivable", 120 },
	{ "Supplies", 130 },
};
accounts.Add("Insurance", 150);

accounts.TryGetValue("Supplies", out int account);

Console.Write("\nSupplies account: " + account);


List<string> sentences = new List<string>
{
	"I am playing",
	"I play",
	"You are going",
	"You go",
	"He is running"
};
sentences.Remove("He runs");

// Lambda expression =>
IEnumerable<string> ingEndSentences = sentences.Where(a => a.EndsWith("ing")); // EndsWith, Contains
List<string> ingEndSentences2 = sentences.Where(a => a.EndsWith("ing")).ToList(); // EndsWith, Contains

Console.WriteLine("\nING:");
foreach (var sentence in ingEndSentences2)
{
	Console.WriteLine(sentence);
}

List<string> ingEndSentences3 = new List<string>();
foreach (var sentence in sentences)
{
	if (sentence.EndsWith("ing"))
	{
		ingEndSentences3.Add(sentence);
	}
}
#endregion

#region Parsing and Exceptions
Console.WriteLine("\n\nPARSING AND EXCEPTIONS");

string customNumStr = "324erer";
int customNum;
var validNum = int.TryParse(customNumStr, out customNum);
if (validNum)
	Console.WriteLine(customNum);
else
	Console.WriteLine("Parse Error");

try
{
	customNum = Int32.Parse(customNumStr);
}
catch (Exception ex)
{
	Console.WriteLine("Exception:\n" + ex.StackTrace + "\n");
	//throw new Exception("Exception on Parsing string to int.");
}
#endregion

#region Methods
Console.WriteLine("\nMETHODS (Functions)");
// Access Modifiers
//   public    - most accessible
//   protected - in class where declared and all derived classes
//   internal  - within files in the same assembly
//   private   - only in class where declared

// Output: return type(one) - [void = no return], side effects

// Input: arguments

// keyword static - can be called without object instantiation

PrintText("To be printed.");
PrintText("End.");

decimal num1 = 12.3m;
decimal num2 = 2.5m;
int num3 = 3;

decimal quotient = Divide(num1, num2); // num1, num2 are Arguments - values on function call
Console.WriteLine("{0} / {1} = {2}", num1, num2, quotient);

Console.WriteLine("{0} * {1} * {2} = {3}", num1, num2, num3, Multiple(num1, num2, num3));
Console.WriteLine("{0} * {1} = {2}", num1, num2, Multiple(num1, num2));
Console.WriteLine("{0} * {0} = {1}", num1, Multiple(num1));

Console.WriteLine("5! = " + Fact(5)); //Recursion
Console.WriteLine("6! = " + Factorial(6));

Console.WriteLine("Log10(136) = " + Math.Log10(136));

#endregion

#region Enum
Console.WriteLine("\nENUM"); // Enumerator

Gender wordGender = Gender.Neutrum;
Gender word2Gender = (Gender)1; // cast

Console.WriteLine("word Gender: " + wordGender);
Console.WriteLine("word2 Gender: " + word2Gender);
if (wordGender == Gender.Neutrum)
{
	Console.WriteLine("word Gender: " + wordGender.ToString());
	Console.WriteLine("word Gender Id: " + (int)wordGender);
}

Sex personSex = Sex.Male;
Console.WriteLine("Sex: " + personSex.ToString());
Console.WriteLine("Sex: " + personSex.GetDescription());

Console.WriteLine("All Genders:");
foreach (Gender gender in Enum.GetValues(typeof(Gender)))
{
	Console.WriteLine("- {0}", gender.GetDescription());
}
#endregion

#region Classes
Console.WriteLine("\nCLASSES");

decimal xReal = 2, xImag = 3;
decimal yReal = 4, yImag = 5;
decimal zReal, zImag;

zReal = Add(xReal, yReal);
zImag = Add(xImag, yImag);

ComplexNumber xComplex = new ComplexNumber(2, 3);
ComplexNumber yComplex = new ComplexNumber(4, 5);
ComplexNumber zComplex = xComplex.Add(yComplex);


// System Class
DateTime currentDate = DateTime.Now;
Console.WriteLine("DateTime.Now() = {0}", currentDate);
Console.WriteLine("Date = {0} ", currentDate.ToString("dd.MM.yyyy"));
Console.WriteLine("Date = {0:dd.MM.yyyy} ", currentDate);
Console.WriteLine("Year = " + currentDate.Year);

// Custom Classes
// ComplexNumber
Console.WriteLine("");
Console.WriteLine(ComplexNumber.Format);
Console.WriteLine(ComplexNumber.GetDescription());

ComplexNumber complex0 = new ComplexNumber();
complex0.Real = 1;

ComplexNumber complex1 = new ComplexNumber(5, 3);
double r = complex1.Real;

ComplexNumber complex2 = new ComplexNumber
{
	Real = 6,
	Imag = 7
};

ComplexNumber complex3;
complex3 = new ComplexNumber()
{
	Real = 4,
	Imag = 2
};

MoreComplexNumber complex4 = new MoreComplexNumber(4, 2);
MoreComplexNumber complex = new MoreComplexNumber();

ComplexNumber summation = complex1.Add(complex2).Add(complex3);
//ComplexNumber summation2 = ComplexNumber.Add(ComplexNumber.Add(complex1, complex2), complex3);

ComplexNumber division = complex1.Divide(complex2);

Console.WriteLine("c0 = " + complex0);
Console.WriteLine("c1 = " + complex1);
Console.WriteLine("c2 = " + complex2.ToString());
Console.WriteLine("c3 = " + complex3.ToDiffString());
Console.WriteLine("c4 = " + complex4.ToDiffString());

Console.WriteLine("\nsummation = " + summation.ToDiffString());
Console.WriteLine("division = " + division.ToDiffString());
Console.WriteLine("minus = " + new ComplexNumber(2, -5).ToDiffString());
Console.WriteLine("real = " + new ComplexNumber(7, 0).ToDiffString());

Console.WriteLine("c1(modul) = " + complex1.Modul());
Console.WriteLine("c1 ^ 0 =" + complex1.Pow(0));
Console.WriteLine("c1 ^ 1 =" + complex1.Pow(1));
Console.WriteLine("c1 ^ 2 =" + complex1.Pow(2));
Console.WriteLine("c1 ^ 4 =" + complex1.Pow(2));
Console.WriteLine("c1 ^ (-2) =" + complex1.Pow(-2));

List<ComplexNumber> roots = complex1.Nroot(3);
Console.WriteLine("c1 ^ (1/3) = ");
foreach (var c in roots)
	Console.WriteLine(c);

// User
User user = new User()
{
	FirstName = "John",
	LastName = "Reacher",
	PersonSex = Sex.Male,
	BirthDate = DateTime.Parse("12/5/1987"),
	UserName = "Johnny",
	Email = "[email protected]",
	Company = "Google",
	YearsOfService = 5,
	Sallary = 2000/*,
	HomeAddress = new Address()
	{
		City = "Banjaluka",
		Street = "Jevrejska"
	}*/
};

user.ResetPassword("1234abc!");

user.HomeAddress = new Address()
{
	City = "London",
	Street = "Baker Street"
};

Console.WriteLine("\nUSER: " + user);
Console.WriteLine("Year of Birth: " + user.BirthDate.Year);
Console.WriteLine("City: " + user.HomeAddress.City);

Square Square = new Square(4);
Console.WriteLine("Square(side:4), area = " + Square.CalcArea());

#endregion

#region InputConsole
Console.WriteLine("INPUT (console)");
string input = null;

while (input != "")
{
	Console.Write("\nInput number:");
	input = Console.ReadLine();
	bool inputValid = int.TryParse(input, out int inputNum);
	if (inputValid)
		Console.WriteLine("Number is valid. (Press Enter to Finish)\n");
	else
		Console.WriteLine("Number is not valid.(Press Enter to Finish)\n");
}
#endregion

#region InputFile
Console.WriteLine("INPUT (file)");
Console.Write("\nInput file path(Enter for no file, 'd' for default[ComplexIn.csv]): ");

string desktop_path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "//";

string filePath = null;
string inputFilePath = Console.ReadLine();
if (inputFilePath == "d")
	inputFilePath = "ComplexIn.csv";
if (inputFilePath != "")
	filePath = desktop_path + inputFilePath;

string output_file = "ComplexOut.csv";
string line = null;
char separator = ',';

List<ComplexNumber> complexNumbers = new List<ComplexNumber>();

if (inputFilePath != "")
	using (StreamReader str_reader = new StreamReader(filePath))
	{
		str_reader.ReadLine(); // skips first line as it contains names of columns
		while ((line = str_reader.ReadLine()) != null)
		{
			string[] values = line.Split(separator);
			complexNumbers.Add(new ComplexNumber(Double.Parse(values[0]), Double.Parse(values[1])));
		}

		//output all objects to the file
		string output_path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
		using (StreamWriter wr = new StreamWriter(desktop_path + output_file))
		{
			wr.WriteLine("Real,Imag");
			foreach (var complexNumber in complexNumbers)
				wr.WriteLine(complexNumber.ToCSV());
		}
	}
Console.WriteLine("Press Enter for Quit.");
Console.ReadKey();
// Don't copy code, all that is repeated should be in functions

About

Examples of c# code

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages