Reversing a string - two approaches Test Case:
Input- "I'm hungry!" 
Output- "!yrgnuh m'I"

Approach 1: In this approach, I used a empty string and bind it with the input string reversely.

public static class ReverseString {

   public static string Reverse (string input) {

    //bind the string to an empty string reversly
    var reversedString = "";

    //check if the input is empty
    if (input == "")
    {
        return "";
    } 
    else 
    {
        for (int i = input.Length - 1; i &gt;= 0; i--)
        {
            reversedString += input[i];
        }
       return reversedString;
    }
  }
}


Approach 2: In this approach, I've created an empty char array which has the same length of the string. Then I've copied the value of string's last index to char array's first index and so on.

public static class ReverseString {
   public static string Reverse (string input) {

      char[] chars = new char[input.Length];

      for(int i = 0, j = input.Length -1; i &lt;= j; i++, j--)
      {
        chars[i] = input[j];
        chars[j] = input[i];
      }

      return new string(chars);
   }
}


There are lots of approaches like this(without using built in library). But I wonder which one is the most recommended among programmers preferably C# programmers.Which one do you recommend and why?
Clarity of Approaches

With the first approach, I look at it and I can tell straight away that you are reversing a string.  With the second approach, I need to study it for a minute or two to work out what you're doing.

Unnecessary Code

In the first approach, the check for an empty string is not necessary.  In this case, your logic will not even enter the for loop, resulting in an empty string being returned anyway.

Performance

As you may know, strings are immutable objects in .Net.  It is good practice to use a StringBuilder to create strings in this way, like so:

var reversedString = new StringBuilder(input.Length);
for (int i = input.Length - 1; i &gt;= 0; i--)
{
    reversedString.Append(input[i]);
}
return reversedString.ToString();