Extending class definitions with partial classes in C# .NET

The ‘partial’ keyword helps you divide your classes into multiple files within the same namespace. One obvious usage of partial classes is to split the definition of a large type into smaller chunks. You cannot just use the partial keyword with classes but methods as well.

The partial classes will reside in two – or more – different cs files in the same namespace. Say you have a partial Customer class in the project-name/domains folder:

Read more of this post

Filtering exceptions in C# 6

There’s a new keyword in C# 6 which can only be used in conjunction with exception handling: when. With when we can put a filter on our catch clauses: catch a certain type of exception, e.g. IOException, but only if a certain condition is true. Otherwise continue with the next catch-clause if any.

Consider the following example:

Read more of this post

Importing static methods from a namespace in C# 6

You’ll probably know that if you’d like to use the simple class names in a C# file you have to import its namespace in a using directive. If you want to use the Task class without referring to its fully qualified name including the namespace you have to put…

using System.Threading.Tasks;

…in the top section of the file. Then you can write something like…

Task t = Task.Run<ReturnType>(() => ...);

Similarly the using statement…

using System;

Read more of this post

A new way to format strings in C# 6

In C# 5 we often format strings with the string.Format function. It requires a format string and then a number of parameters that are passed into the format string. C# 6 has a nice addition which simplifies that syntax.

Let’s start with the following Rockband object:

public class Rockband
{
	public string Name { get; }
	public int NumberOfMembers { get; }
	public decimal ConcertFee { get; }

	public Rockband(string name, int numberOfMembers, decimal concertFee)
	{
		Name = name;
		NumberOfMembers = numberOfMembers;
		ConcertFee = concertFee;
	}

	public string GetFancyName()
	{
		return Name.ToUpper();
	}
}

The fancy name is not too fancy but that’s not important now.

Read more of this post

Add items to a list using an extension method in C# 6

C# 6 introduces a new way of filling up collections with objects.

Consider the following Rockband class:

public class Rockband
{
	public string Name { get; }
	public int NumberOfMembers { get; }

	public Rockband(string name, int numberOfMembers)
	{
		Name = name;
		NumberOfMembers = numberOfMembers;
	}
}

Read more of this post

A new way of checking for nulls in C# 6

In this post we explored a couple of ways to handle null values in C# 5.

Obviously you can just test whether an object is equal to null:

private static string Resolve(string input)
{
	if (input == null) throw new ArgumentNullException("Input");
.
.
.
}

Read more of this post

Subscribing to cancel key press events in a .NET console application

Users can stop and close a console application by any of the following methods:

  • Pressing the ‘x’ button in the top right hand corner
  • Pressing ctrl+c
  • Pressing ctrl+break

Occasionally you might want to check whether the user has pressed either ctrl+c or ctrl+break. The following code sample will show you how to do that.

Read more of this post

Using the KeyedCollection object in C# .NET

The abstract generic KeyedCollection object can be used to declare which field of your custom object to use as a key in a Dictionary. It provides sort of a short-cut where you’d want to organise your objects in a Dictionary by an attribute of that object.

Let’s take the following object as an example:

public class CloudServer
{
	public string CloudProvider { get; set; }
	public string ImageId { get; set; }
	public string Size { get; set; }
}

The Image IDs are always unique so the ImageId property seems to be a good candidate for a dictionary key.

Here’s an example:

Read more of this post

Checking whether an enum value exists by an integer reference in C#

Say you have the following ShipmentOption enumeration:

public enum ShipmentOption
{
	Land,
	Sea,
	Air
}

By default each enumeration value will have an integer representation starting with 0. So 0 corresponds to Land, 1 to Sea and 2 to Air. Imagine that a method accepts the numeric value like this:

public void SendShipment(int numericShipmentType)

Then the incoming numeric parameter could be anything. How can we check whether an integer has a corresponding enumeration value?

The following code will do just that:

public void SendShipment(int numericShipmentType)
{
	if (Enum.IsDefined(typeof(ShipmentOption), numericShipmentType))
	{
		Console.WriteLine("This type is defined: {0}", (ShipmentOption)numericShipmentType);
	}
	else
	{
		throw new InvalidEnumArgumentException("ShipmentOption", numericShipmentType, typeof(ShipmentOption));
	}
}

The InvalidEnumArgumentException class is defined in the System.ComponentModel namespace.

Passing in 2 will result in the following output:

This type is defined: Air

An invalid integer argument will throw an exception:

The value of argument ‘ShipmentOption’ (5) is invalid for Enum type ‘ShipmentOption’.

View all various C# language feature related posts here.

How to redirect standard input for a .NET console application

Normally .NET console applications read their input from the console through Console.ReadLine(). The user is prompted for some input, they enter some text, press enter and the console can read this input.

However, this is not the only option you have. The standard input channel can be overridden.

Read more of this post

Elliot Balynn's Blog

A directory of wonderful thoughts

Software Engineering

Web development

Disparate Opinions

Various tidbits

chsakell's Blog

WEB APPLICATION DEVELOPMENT TUTORIALS WITH OPEN-SOURCE PROJECTS

Once Upon a Camayoc

ARCHIVED: Bite-size insight on Cyber Security for the not too technical.