Q:

(string)combination Purpose? 

I'm following an exercise which tasks me to...

"Declare two variables of type string with values "Hello" and "World". 
  Declare a variable of type object.  Assign the value obtained of
  concatenation of the two string variables (add space if necessary) to
  this variable.  Print the variable of type object". 

Now here was my original solution:
string hi = "Hello";
string wo = "World";
object hiwo = hi + " " + wo;
Console. WriteLine(hiwo);
Console. ReadLine();

I found a good website that gives sample solutions of the exercises I am going through, which I have started to go through comparing to my answers, In this one I noticed I was nearly spot on, apart from an extra line.  I've modified my original code to illustrate the comparison more easily. 
My modified code:
string firstWord = "Hello";
string secondWord = "World";
object combination = firstWord + " " + secondWord;
Console. WriteLine(combination); 

Given Solution:
string firstWord = "Hello";
string secondWord = "World";
object combination = firstWord + " " + secondWord;
string a = (string)combination; 
Console. WriteLine(a);

I believe understanding this extra line is the purpose of the exercise.  So my question is why is the extra line exists and what the benefits are to having it?  The section of the book is understanding types and variables. 

A:

The extra line is a type cast:

A cast is a way of explicitly informing the compiler that you intend to make the conversion and that you are aware that data loss might occur.  

Usually, a cast doesn't really return a different object.  It just checks if the object is, at runtime, of the type you're casting to.  That is, the expression firstWord + secondWord returns an object of type string.  Assigning it to a variable of type object doesn't change the fact it's really a string.  Similarly, doing (string) combination doesn't return a different object – it just tells the compiler that the expression is of type string. ( If combination wasn't really a string, the check would fail and throw an exception.) 
In this case there is no benefit to having it there I can see.  Console. WriteLine(object) converts the object to a string internally, and an object that is already a string will just "convert" to itself.