Here are my top basic 12 C# utility Tips & Tricks I usually use when programming daily:

My most used tips and tricks that I use daily when programming in C# and dotnet.

Abdallah Yashir
4 min readOct 31, 2022
  1. Null-Conditional Operator including chaining:
// Will be null if either `person` or `person.Spouse` are null
int? spouseAge = person?.Spouse?.Age;

You can also provide a fallback or default value:

var parent = person?.Parent?.FirstName ?? "N/A";

2. Printing of a variable, type or member without hard coding:

var myString = "String Contents";
Console.WriteLine(nameof(myString));

3. Print the current method name dynamically:

using System;

public class AClass{
public void Method1{
var currentMethod = System.Reflection.MethodBase.GetCurrentMethod().Name;
Console.WriteLine(currentMethod); // "Method1"
}
}

4. Use of Interpolated strings that can be useful for email templates

Console.WriteLine($@"Testing \n 1 2 {5 - 2}
New line");

Output:
Testing \n 1 2 3
New line

5. Join an array of characters to a single string:

string.Join("", array.ToArray());

6. Date formatting comes in super handy, here’s a list of snippets from the book [1]:

var year = String.Format("{0:y yy yyy yyyy}", dt); // "16 16 2016 2016" year
var month = String.Format("{0:M MM MMM MMMM}", dt); // "8 08 Aug August" month
var day = String.Format("{0:d dd ddd dddd}", dt); // "1 01 Mon Monday" day
var hour = String.Format("{0:h hh H HH}", dt); // "6 06 18 18" hour 12/24
var minute = String.Format("{0:m mm}", dt); // "50 50" minute
var secound = String.Format("{0:s ss}", dt); // "23 23" second
var fraction = String.Format("{0:f ff fff ffff}", dt); // "2 23 230 2300" sec.fraction
var fraction2 = String.Format("{0:F FF FFF FFFF}", dt); // "2 23 23 23" without zeroes
var period = String.Format("{0:t tt}", dt); // "P PM" A.M. or P.M.
var zone = String.Format("{0:z zz zzz}", dt); // "+0 +00 +00:00" time zone

7. Copying arrays — both shallow and deep:

var sourceArray = new int[] { 11, 12, 7 };
var destinationArray = (int)sourceArray.Clone();
//destinationArray will be created and will have 11,12,17.

// deep copy
A[] array2 = array1.Select (a =>(A)a.Clone()).ToArray();

8. Get all members values of an enum:

enum MyEnum
{
One,
Two,
Three
}
foreach(MyEnum e in Enum.GetValues(typeof(MyEnum)))
Console.WriteLine(e);

// Will print
One
Two
Three

Enum equality check:

myname.Equals(Enum.GetName(typeof(Name)))

9. Convert a List to a HashSet:

Checking if an element is present in a HashSet is faster than in a List (0(1) vs 0(n)) esp. with large data sets.

var hashSet = new HashSet<YourType>(yourList);

10. Use of Singleton constructor pattern:

Singleton can be useful when managing access to a resource that is shared across the application and might be costly to have multiple e.g. database connection pool.

public class Singleton
{
public static Singleton Instance { get; } = new Singleton();
private Singleton()
{
// Put custom constructor code here
}
}

11. Simple Object initializers with non-default constructor:

Instead of creating a new class and assigning the properties individually, you can use an initializer.

public class Article {
public string Title { get; set; }
public string Body {get; set; }

public Article(int number)
{
// do stuff here
}
}

var newArticle = new Article(1) { Title = "Article 1", Body = "This is article 1 body" }

12. Named Arguments:

With such arguments, the order you pass them is not essential.

public static string JoinSomething(string left, string right)
{
return string.Join("_", left, right);
}

Console.WriteLine(JoinSomething("left", "right")); // left_right
Console.WriteLine(JoinSomething(right: "right", left: "left")); //left_right

Another popular concept is the use of Extension Methods, which enable you to extend the behaviour of existing classes without modifying the source code or requiring special permissions.

--

--

Abdallah Yashir

Senior Software Developer, Writer, Amateur Photographer, Reader