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.
- 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.