C# Cheat Sheet

Bereich

Thema

Sourcecode

Variablen 

Implizierte Variablen 

// Erst ab .NET 3.0: 

var stringTest = Console.ReadLine(); // normaler String

var strArray = new[] {"asdf", "abc"}; // impliziertes Array

Strings 

Leerer String 

string strTest = string.Empty; // NICHT strTest = "";

Verkettung, Massen- manipulation 

StringBuilder sb = new StringBuilder();

sb.Append(strIrgendwas); // schneller als alles über GC laufen zu lassen via +=

sb.Replace('A', 'B');

Konvertierung 

// FALSCH (wenn dann mit try/catch): 

string strOfConsole = Console.ReadLine();

int iTest = Convert.ToInt32(strOfConsole);

 

// RICHTIG: 

int iTest;

if( int.TryParse(Console.ReadLine(), out iTest) == true )

{ ... }

Auffüllen 

string.Format("{0,5}", 15); // ___15

string.Format("{0,-5}", 15); // 15___

Performance 

Zeitmessung 

using System.Diagnostics;

Stopwatch sw = new Stopwatch();

sw.Start(); 

// Code, der gemessen werden soll 

sw.Stop(); 

string strMillisekunden = sw.ElapsedMilliseconds.ToString();

Arrays 

Foreach 

foreach( string s in arrOfStrings ) { ... } // IEnumerator

Init. & Dekl. 

int[] arrIntTest = new int[5];

int[,] arrIntTest = new int[5,10];

int[,,] arrIntTest = new int[5,10,15];

int[] arrIntTest = new int[] { 1,2,3,4,5 };

int[,] arrIntTest = new int[,] { {1,2,3,4,5} , {7,8,9} };

Statische vs. Dynamische Methoden 

int[] arrIntTest = new int[5];

arrIntTest.CopyTo(arrAnotherOne); // dynamisch

Array.Copy(arrIntTest, arrAnotherOne); // statisch, aber dasselbe

Array.Clear(arrIntTest,1,4); // Nur noch EIN Element enthalten und Clear nicht dynamisch!

Schnellsuche 

Array.BinarySearch(dDouble, 2.0); // Baumsuche, beim ersten mal unsortiert, danach schneller

Array.BinarySearch<double>(dDouble, 2.0); // noch besser, da generisch

Klassen 

Properties 

public string strProperty

{

   get

   { return strProperty; }

   set

   { strProperty = value; }

}

Generische Einschränkung 

public MyClass<number,Customer> where number: IComparable { ... } // eigentliche generische Klasse

public MyCompareClass : IComparable { ... } // notwendige Ableitung

 

MyClass<int,Customer> Test = new MyClass<int,Customer>; // funktioniert sofort, da comparable

MyClass<MyCompareClass,Customer> = new MyClass<int,Customer>; // nur wenn von IComparable abgeleitet

Iterieren durch Klasse ermöglichen 

// foreach ( int iSth in Test ) { ... } 

public IEnumerator<MyType> GetEnumerator() { for(...) { yield return arrSth[i]; } }