System.ArgumentException: An item with the same key has already been added

Problem Dictionaries require keys to be unique. When you try to add a key/value to a dictionary and the key already exists, you get the following exception: System.ArgumentException: An item with the same key has already been added. This can happen when you use Dictionary.Add() or when you initialize a dictionary using the “curly brace” … Read more

C# – Remove items from dictionary

Dictionaries contain key/value pairs. When you want to remove one or more items from a dictionary, you can use one of the following methods: I’ll show examples below. Remove item by key Use Dictionary.Remove() to remove an item based on its key. If the key exists, it removes the key/value pair from the dictionary and … Read more

C# – Get value from dictionary

Dictionaries store key/value pairs. When you want to get the value for a key, you can use the indexer syntax and specify the key, like this: Note: In order to show how to get a value, I had to initialize the dictionary with key/value pairs. This returns the value associated with the “Bob” key and … Read more

C# – Initialize a dictionary

You can declare a dictionary and initialize it with values by using the collection initializer syntax. Within the initializer block, you have two options for adding key/value pairs to the dictionary: I’ll show examples of both options below. Note: If you have a list of items already, you can convert the list to a dictionary … Read more

C# – Add to a dictionary

The simplest way to add a key/value pair to a dictionary is by using Dictionary.Add(), like this: If the key already exists, Dictionary.Add() throws an ArgumentException because the key must be unique. There are a few other ways to add to a dictionary in different scenarios, which I’ll explain below. Add or update key/value in … Read more

C# – Get temp folder path and create a temp file

You can use Path.GetTempPath() to get the user’s temp folder path. Here’s an example: I’m running this in Windows, so it outputs my temp folder path: Path.GetTempPath() gets the temp folder path by checking environment variables (TMP, TEMP, USERPROFILE). It falls back to returning the system temp folder. Create a temp file Once you have … Read more

C# – Validate an IP address

Use IPAddress.Parse() to parse an IP address from a string. This handles both IPv4 and IPv6 addresses and throws an exception if the string can’t be parsed into a valid IP address. Here’s an example: This outputs the following: Use IPAddress.TryParse() if you don’t want exceptions to be thrown. It returns false if the string … Read more

C# – Ignore case with string.Contains()

By default, string.Contains() does a case sensitive search for a substring (or character) in a string. You can make it do a case insensitive search instead by passing in StringComparison.OrdinalIgnoreCase, like this: Note: StringComparison has three ‘ignore case’ options to choose from. Because this is doing a case insensitive search, it matched “earth” to “Earth” … Read more

C# – Get all files in a folder

There are two simple ways to get all files in a folder: I’ll show examples below, along with a few other scenarios, such as getting files from subfolders. Note: ‘directory’ and ‘folder’ mean the same thing. I use these terms interchangeably. Get all files with Directory.GetFiles() Directory.GetFiles() returns all file paths from the top-level folder … Read more

C# – Convert JSON to an object

Converting a JSON string to an object is referred to as deserialization. You can do this with a JSON serializer. There are two primary options: I’ll show examples by deserializing the following Movie JSON to a Movie object: Movie JSON: Movie class (properties match JSON): Using JsonSerializer.Deserialize() (in System.Text.Json) To deserialize with the built-in JsonSerializer.Deserialize(), … Read more

C# – Find a character in a string

There are three methods you can use to find a character in a string: I’ll show examples below. Using string.IndexOf() to find a character string.IndexOf() returns the index of the first occurrence of a character in a string. It searches the string from left to right, starting at the beginning. If it doesn’t find the … Read more

C# – Serialize to JSON in alphabetical order

There are two ways to serialize an object’s properties to JSON in alphabetical order using System.Text.Json: I’ll show how to do these two options below. Option 1 – Manually alphabetize with JsonPropertyOrder You can specify the exact serialization ordering by using the JsonPropertyOrder attribute. Therefore, to serialize in alphabetical order, first arrange the properties in … Read more

C# – Remove spaces from a string

The simplest way to remove spaces from a string is by using string.Replace(). Here’s an example: This outputs the following. Notice the spaces are removed. string.Replace() is good for removing all occurrences of a specific character (” ” in this case). When you want to remove all whitespace characters (spaces, tabs, newlines, etc..), there are … Read more

C# – Remove first or last character from a string

Use string.Remove() to remove character(s) from a string based on their index, such as the first or last character. This method has two parameters: string.Remove() returns a new string with the characters removed. I’ll show examples below. Remove the first character from a string To remove the first character, use string.Remove(startIndex: 0, count: 1), like … Read more

C# – ‘internal’ vs ‘protected’

The public/private access modifiers are straightforward: public means everything has access while private means only the class has access. The internal/protected access modifiers are a little more complicated. In other words, internal means it’s “private” to the assembly and protected means it’s “private” to the class and its subclasses. To illustrate the difference, I’ll show … Read more

C# – Default access modifiers

Classes (and other types) are internal by default. Class members (methods/properties/fields) are private by default. These defaults are applied when you don’t explicitly declare an access modifier. Here’s an example: Since the access modifiers aren’t declared, it uses the defaults. The class is internal while all of the members are private. This is almost never … Read more

C# – Get int value from enum

The simplest way to get an enum’s int value is by casting it to an int. Here’s an example: This outputs the following: When the enum is generic (of type ‘Enum’) You can’t cast a generic ‘Enum’ to int, otherwise you get a compiler error (CS0030 Cannot convert type ‘System.Enum’ to ‘int’). Use Convert.Int32() instead. … Read more

C# – How to convert string to int

There are three ways to convert a string to an int: I’ll show examples of using these approaches. Use int.Parse() int.Parse() takes a string and converts it to a 32-bit integer. Here’s an example of using int.Parse(): When conversion fails int.Parse() throws an exception if it can’t convert the string to an int. There are … Read more

C# – How to convert char to int

Converting a char to an int means getting the numeric value that the char represents (i.e. ‘1’ to 1). This is not the same as casting the char to an int, which gives you the char’s underlying value (i.e. ‘1’ is 49). There are three ways to convert a char to an int: I’ll show … Read more

C# – Using String.Join()

You can use String.Join() to convert a collection of items to a string with a separator (such as a comma). Here’s an example of using String.Join() to convert a List of strings to a comma-separated string: This results in the following comma-separated string: String.Join() can be used on wide variety of input: I’ll show a … Read more

C# – Convert a List to a string

There are two good ways to convert a List<T> to a string: I’ll show examples of both approaches. Using String.Join() String.Join() is the simplest way to convert a List to a string. With this method, you pass in the List and a delimiter and it outputs a string. You can use any delimiter you want. … Read more

C# – Delete all files in a directory

Use Directory.EnumerateFiles() to get a directory’s files and then delete them with File.Delete() in a loop: This deletes the root directory’s files without deleting the directory itself. I’ll show more examples. Delete all files with a specific extension Use Directory.EnumerateFiles’ searchPattern pattern to get files with a specific extension. Here’s an example of deleting all … Read more

C# – How to use LinkedList

LinkedList<T> is a doubly linked list. It consists of nodes with values (i.e. integers, strings, etc…) and links to the next and previous node. LinkedList<T> has a reference to the head and tail nodes, which enables efficient insertion (and removal) from the start and end of the list. The main reason to use LinkedList<T> is … Read more

C# – Remove duplicates from a list

The simplest (and most efficient) way to remove duplicates from a list is by iterating, keeping track of items you’ve seen with a HashSet, and discarding items you’ve already seen. I’ll show four ways to implement this O(n) algorithm. At the end, I’ll explain a few inefficient approaches to avoid. Remove duplicates with ToHashSet() and … Read more