Some C# / .NET techniques as I encounter them. More to follow…
Arrays and Strings
Using an array of strings in a foreach loop:
using System.IO;
using System;
class Program
{
static void Main()
{
string[] values = new string[]{ "abc", "xyz", "123" };
foreach( string s in values )
{
Console.WriteLine( s );
}
}
}
Console output:
Providing array-like access to classes, using the [] array access operator.
using System.IO;
using System;
class StringIndexer
{
private static int limit = 5;
private string[] values = new string[limit];
public int Limit()
{
return limit;
}
public string this[int index]
{
get
{
if (index < limit && index >= 0)
{
return values[index];
}
else
{
return "";
}
}
set
{
if (index < limit && index >= 0)
{
values[index] = value;
}
}
}
}
class MainProgram
{
public static void Main()
{
StringIndexer stringIndexer = new StringIndexer();
stringIndexer[0] = "The";
stringIndexer[1] = "cat";
stringIndexer[2] = "sat";
stringIndexer[3] = "on";
stringIndexer[4] = "the";
stringIndexer[5] = "mat";
for (int i = 0; i <= 10; i++)
{
Console.WriteLine("String Element #{0} = {1}", i, stringIndexer[i]);
}
}
}
Console output:
IEnumerable
An interface specifying that the underlying type implements GetEnumerator(). It allows iteration of non-generic collections, and is returned returned from query expressions
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
IEnumerable<int> result = from value in Enumerable.Range(0, 5)
select value;
// Loop.
foreach (int value in result)
{
Console.WriteLine(value);
}
// We can use extension methods on IEnumerable<int>
double average = result.Average();
// Extension methods to convert IEnumerable<int> into int array
List<int> list = result.ToList();
int[] array = result.ToArray();
}
}
Console output:
Properties
Example usage of instance, static and read-only properties:
using System.IO;
using System;
class Employee
{
// static properties
public static int numberOfEmployees;
private static int counter;
private static string name;
// Read-write properties
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
// Read-only property
public int Counter
{
get
{
return counter;
}
}
// Constructor
public Employee()
{
counter = ++counter + numberOfEmployees;
}
}
class MainProgram
{
public static void Main()
{
Employee.numberOfEmployees = 100;
Employee employee = new Employee();
employee.Name = "Jones";
Console.WriteLine( "Employee number: {0}", employee.Counter);
Console.WriteLine( "Employee name: {0}", employee.Name);
}
}
Console output:
Lambda Expressions
Use the => token, called the lambda operator, to separate the input variables on the left from the lambda body on the right.
using System;
using System.Linq;
namespace LambdaExpression
{
public delegate TResult Func<TArg0, TResult>(TArg0 arg0);
class Program
{
static void Main(string[] args)
{
// Using Count to obtain total even numbers
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n % 2 == 1);
Console.WriteLine("Number of odd numbers = ", oddNumbers);
// Using delegate to determin if number is a multiple of 5
Func<int, bool> myFunc = x => x % 5 == 0;
bool result = myFunc(15);
Console.WriteLine("result = {0}", result);
// Lambda to get the longest length string
var strings = new string[] { "1", "02", "003", "0004", "00005" };
string longest = strings.OrderByDescending(s => s.Length).First();
Console.WriteLine("Longest string = {0}", longest);
}
}
}
Connect to a SQL Server Database
A simple example whereby we connect to the SQL Server database on clicking the WinForms button and setting the SQL connection string:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WinForm1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnectionStringBuilder sqlConnBuilder = new SqlConnectionStringBuilder();
sqlConnBuilder.DataSource = "L011035\\DIRDEV";
sqlConnBuilder.InitialCatalog = "IRDB";
sqlConnBuilder.IntegratedSecurity = true;
sqlConnBuilder.UserID = "webba";
sqlConnBuilder.Password = "";
string connectionString = sqlConnBuilder.ConnectionString;
SqlConnection cnn = new SqlConnection(connectionString);
try
{
cnn.Open();
MessageBox.Show ("Connection Open ! ");
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open connection ! ");
}
}
}
}
Read an XML attribute
For example, read the “checksum” (SHA-256) and media file name from the following XML:
<?xml version="1.0" encoding="utf-8" ?>
<file name="ZOO.mp4" source="">
<Request Type="AddSegmentable">
<Key CompositeID="53_Ev_CC_10_15" />
<Attachment Name="ZOO.mp4" Update="Y" LocalPath="C:\Symphony\File Drop" Description="MFM" Type=".Supporting File" FileSize="3526921" />
</Request>
<checksum>
<type>SHA 256</type>
<value>8584149da444979c794281007369964d89079b5263972850be05b66354a980e2</value>
</checksum>
<RepositoryPath>2015\03\20\53_Ev_CC_10_15</RepositoryPath>
</file>
Use the XDocument object to obtain attributes:
using System;
using System.Linq;
using System.Text;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
// Using Count to obtain total even numbers
try
{
XDocument xmlDoc = XDocument.Load("C:\\Backup\\xml.xml");
string SHA256 = xmlDoc.Root.Element("checksum").Element("value").Value.ToString();
string mediaFileName = xmlDoc.Root.Attribute("name").Value.ToString();
Console.WriteLine("SHA-256 value = {0}", SHA256);
Console.WriteLine("Media file = {0}", mediaFileName);
}
catch (Exception ex)
{
Console.WriteLine("XML file not found");
}
}
}
Giving the following output:
Use linq to query lists of objects
How to return all items that match a given criteria, in this case return a list of all integers greater than 6:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Search
{
class Program
{
static void Main(string[] args)
{
List<int> items = new List<int>{ 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 };
Console.WriteLine("All values:");
foreach (int item in items)
{
Console.Write(item + " ");
}
var search = items.Where(s => s > 6);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Search results: all values greater than 6:");
foreach (int value in search)
{
Console.Write(value + " ");
}
}
}
}
Another example, this time searching on a list of objects and searching on object attribute values:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Search
{
class Data
{
public Data(string title, string description)
{
Description = title;
Value = description;
}
public string Description
{ get; set; }
public string Value
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Data> items = new List<Data>
{
new Data("One", "1"),
new Data("Two", "2"),
new Data("Deux", "2"),
new Data("Three", "3"),
new Data("Four", "4"),
new Data("Five", "5")
};
Console.WriteLine("All values:");
foreach (var item in items)
{
Console.WriteLine(item.Description + " " + item.Value);
}
var search = items.Where(s => s.Value == "2" || s.Description == "Five");
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Search results: items matching value = 2 OR description = Five");
foreach (var value in search)
{
Console.WriteLine(value.Description + " " + value.Value);
}
}
}
}
Giving the following search result:
Delegates
A data structure that can be used to refer to a static method or to a class instance and an instance method of that class.
Example:
using System;
namespace Delegate
{
// Declares a delegate for a method that takes in an int and returns a String.
public delegate string MethodDelegate(int val);
// Defines some methods to which the delegate can point.
public class SampleClass
{
// Defines an instance method.
public static string GetPolarityString(int val)
{
if (val > 0)
return "positive";
return val < 0 ? "negative" : "zero";
}
// Defines a static method.
public static string GetSignString(int val)
{
if (val > 0)
return "+";
return val < 0 ? "-" : "";
}
public string GetValueString(int val)
{
return val.ToString();
}
}
internal static class Program
{
private static void Main()
{
// For the instance method, an instance (sampleClass) must be supplied.
var sampleClass = new SampleClass();
// Creates one delegate for each method.
// For the static method, use the class name.
var delegate1 = new MethodDelegate(SampleClass.GetPolarityString);
var delegate2 = new MethodDelegate(SampleClass.GetSignString);
// Invokes the delegates.
const int val = 5;
Console.WriteLine("{0} is {1}; use the sign \"{2}\".", sampleClass.GetValueString(val), delegate1(val), delegate2(val));
}
}
}
Giving the following output:








