What is the difference between String and string in C#?

Everything in C# language is an Object, there are no primitive types in the classic sense. That means string is not a truly primitive types, it is an object instance of a Class. System.String and string are compiled to System.String in Intermediate Language (IL), so there is no difference in the performance, and it's purely a personal choice. Also; string is an alias for System.String. They compile to the same code, so at execution time there is no difference . This is just one of the aliases in C#. The complete list of alias is:

object:  System.Object
string:  System.String
bool:    System.Boolean
byte:    System.Byte
sbyte:   System.SByte
short:   System.Int16
ushort:  System.UInt16
int:     System.Int32
uint:    System.UInt32
long:    System.Int64
ulong:   System.UInt64
float:   System.Single
double:  System.Double
decimal: System.Decimal
char:    System.Char