- String
- Using String Insert Effectively
Using String Insert Effectively In C#

Introduction
Insert is a quick way to put one string into another. In C#, this is good for string manipulation, output variables into strings, or combining strings. But there is an exception that can be raised with incorrect values. There are multiple ways of doing this including, replace, format, concatenation, and Interpolation so keep in mind that C# has multiple ways of doing the same way. Also, I'll explain how insert works, and the interworkings of how it can be done.
What is String Insert?
The insert method puts a single string in-between a section of the string. The first parameter is an index, it lets you pick at what point to insert a string. the second parameter is the string you want to insert. Both of these parameters must be valid input. The size of the string you want o insert doesn't matter just as long as it is inserted in the valid range of the existing string. Syntax
Syntax
public string Insert(int index, string value)
Notice that the function call allows for an index of the current string where the insert will start. Then in the next parameter, you can pass the string you want to insert. Let's see an example, by looking at the code below.
string debugStatement = "Error Generated at for function";//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = 19;//Start index of the insert
string completedStatement = debugStatement.Insert(index, timestamp.ToString()); //Call the insert function
Console.WriteLine(completedStatement);//Display result
Code Output
Error Generated at 5/1/2022 2:15:46 PM for function
This code snippet simply takes an existing string and inserts a date between the at and for text.
String Insert Exceptions
It's important to note when exceptions can happen and when they might happen so that we can guard the code against such cases. The first is the index out-of-range exception.
Index Out of Range Exception
This exception comes when the index provided is either less than 0 or greater than the length of the original string. See the code example below that will generate an error.
string debugStatement = "Error Generated at for function";//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = -1;//Start index of the insert which will cause an exception
string completedStatement = debugStatement.Insert(index2, timestamp.ToString());//Call the insert function
Console.WriteLine(completedStatement);//Display result
Result

As you can see the index is less than 0 which is not a valid index in the original string. To handle this case will have a wrapper function over the string insert method to handle such cases. Check out the code below.
//Protection Against String Insert Index Out of Range Exception
string debugStatement = "Error Generated at for function";//Starting string//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = -1;//Start index of the insert which will cause an exception
string completedStatement = InsertText(index, debugStatement, timestamp.ToString());//Call the updated insert function
Console.WriteLine("Result1:" + completedStatement);//Display result
index = 100;//Start index that is outside the length of the original string
completedStatement = InsertText(index, debugStatement, timestamp.ToString());//Call the updated insert function
Console.WriteLine("Result2:" + completedStatement);//Display result
string InsertText(int index, string originalText, string textToInsert)
{
if (index < 0 || index > originalText.Length - 1)
{
return originalText;
}
string newText = originalText.Insert(index, textToInsert);
return newText;
}
In the insert text wrapper function we handle both the case of the index being less than 0 and also when the insert index is greater than the length - 1 of the original string.
Null Exception
Null Exception happens when the string we want to insert is null. If it was just an empty string it would be ok and there wouldn't be an exception so we must guard the code against a null value. See the code below to see how the error can be caused.
string debugStatement = "Error Generated at for function";//Starting string
string? timestamp = null;//Date that we want to insert but since it is null an exception will be thrown
int index = 19;//Start index of the insert which will cause an exception
string completedStatement = debugStatement.Insert(index, timestamp);//Call the updated insert function
Console.WriteLine(completedStatement);//Display result
Result

To resolve this issue. We are going to add a null check to that parameter so that use case will be handled. Now adding that check to the preview created InsertText wrapper function. Inspect the code below.
string debugStatement = "Error Generated at for function";//Starting string//Starting string
string? timestamp = null;//Date that we want to insert but since it is null an exception will be thrown
int index = 19;//Start index of the insert which will cause an exception
string completedStatement = InsertText(index, debugStatement, timestamp);//Call the updated insert function
Console.WriteLine(completedStatement);//Display result
string InsertText(int index, string originalText, string textToInsert)
{
if (index < 0 || index > originalText.Length - 1)
{
return originalText;
}
if(string.IsNullOrEmpty(textToInsert))//Add null check
{
return originalText;
}
string newText = originalText.Insert(index, textToInsert);
return newText;
}
Code Output
Error Generated at 5/1/2022 2:15:46 PM for function
When Might This Function Be Used?
Fixed position or repeated patterns
Cases when it is known where the insert index will be all the time and also if there. For example, date and time when it is known that the day, month, or year are a fixed position and length. Also, look for repeated patterns where you might use the indexOf to find a certain character or set of characters to find the insert point.
Readability
Another consideration when using this function is how this might keep the code simple and readable so that whenever you can keep the code simple so that others can who might work on the code can come in a quickly understand what is going on that is a good thing. So having this function describes what is doing is useful for readability.
Alternate String Insert Methods
There are other ways of inserting a string into a string because often times when we just don't need to insert one string we need to insert multiple strings at a time. So below are some ways in which we can insert multiple strings into a string at one time.
String Replace
Placeholders for strings can be put in string then we use string replace insert at the place holder for that we want to replace. See the example below.
string GetQuery(int fileId, string fileType, int userId)
{
string query = @"select
*
from
file_main
where
file_id = [FILE_SCOPE]
and file_type = [TYPE]
and user_id = [USER]";
query = query.Replace("[FILE_SCOPE]", fileId.ToString());//Replace [FILE_SCOPE] with fileId variable
query = query.Replace("[TYPE]", fileType);//Replace [TYPE] with fileType variable
query = query.Replace("[USER]", userId.ToString());//Replace [USER] with userId variable
return query;
}
int fileId = 2318;
string fileType = "CSV";//CSV is a common file type
int userId = 3248;
string queryComplete = GetQuery(fileId, fileType, userId);
Console.WriteLine(queryComplete);
Code Output
select
*
from
file_main
where
file_id = 2318
and file_type = CSV
and user_id = 3248
String Format
String format use places holders in curly braces starting with 0,1,..n to how many parameters you want to insert into the string. A simple example is below.
string GetQuery(string lastName, string userType)
{
string query = @"select
*
from
user_main
where
last_name = {0}
and user_type = {1}";
string finalQuery = string.Format(query, lastName, userType);
return finalQuery;
}
string lastName = "Shepard";
string userType = "ADMIN";
string queryComplete = GetQuery(lastName, userType);
Console.WriteLine(queryComplete);
Code Output
select
*
from
user_main
where
last_name = Shepard
and user_type = ADMIN
String Concatenation
This type of string insert can be used to combine different strings or insert variables into strings but it can be tedious to construct when as sections and variables increase.
string GetQuery(string lastName, string userType)
{
string query = "select " +
" * " +
" from" +
" user_main " +
" where " +
" last_name = " + lastName +
" and user_type = " + userType;
string finalQuery = string.Format(query, lastName, userType);
return finalQuery;
}
string lastName = "Shepard";
string userType = "ADMIN";
string queryComplete = GetQuery(lastName, userType);
Console.WriteLine(queryComplete);
Code Output
select * from user_main where last_name = Shepard and user_type = ADMIN
String Interpolation
This way allows to place the variables in line similar to concatenation but it is easier because there is less formatting needed.
string GetQuery(int fileId, string fileType, int userId)
{
string query = $"select * from file_main where file_id = {fileId} and file_type = {fileType} and user_id = {userId}";
return query;
}
int fileId = 2318;
string fileType = "CSV";//CSV is a common file type
int userId = 3248;
string queryComplete = GetQuery(fileId, fileType, userId);
Console.WriteLine(queryComplete);
Code Output
select * from file_main where file_id = 2318 and file_type = CSV and user_id = 3248
How String Insert Works
There can be many ways to create a string insert function. One way is to use a substring to take the substring to the index and take the substring of the index to the end of the string. Then take the text we want to insert and concatenate it in between the two substrings. See the code snippet below.
string InsertInString(string originalText, int index, string textToInsert)
{
if (index < 0 || index > originalText.Length - 1)//Add index check
{
return originalText;
}
if (string.IsNullOrEmpty(textToInsert))//Add null check
{
return originalText;
}
string firstHalf = originalText.Substring(0, index);//Substring of the first half the text
string secondHalf = originalText.Substring(index, (originalText.Length) - index); //Substring of the second half the text
string final = firstHalf + textToInsert + secondHalf;//Concatenate all the strings together
return final;
}
string debugStatement = "Error Generated at for function";//Starting string
DateTime timestamp = DateTime.Now;//Date that we want to insert
int index = 19;//Start index of the insert which will cause an exception
string completedStatement = InsertInString(debugStatement, index, timestamp.ToString());//Call the insert function
Console.WriteLine(completedStatement);//Display result
Code Output
Error Generated at 5/8/2022 3:42:16 PM for function
Conclusion
String Insert gives you a quick option to put text into another. Using the index, you can use it for automated processes or string generation. It has good readability as it describes exactly what it is doing. This is different from the alternative methods that can get the same result as an insert but don't convey that it is inserting. So insert is good for beginners and it's simple with only two parameters.