В обеих статьях говорится, что строка НЕ является примитивным типом.А это не так.
Если вы скомпилируете и запустите пример кода из второй статьи, он выведет:
строка не является примитивным типом.
Я думаю, что путаница в этом заключается в том, что синтаксис создания новой строки похож на создание типов значений.
При определении типа значения все они равны (в любом случае, в 32-битной системе)
System.Int32 a = new System.Int32(5);
System.Int32 a = 5;
int a = 5;
Также как при создании строки ссылочного типа:
System.String s = new System.String(new char[]{'h', 'e', 'l', 'l', 'o'});
System.String s = "hello";
string s = "hello";
Также мы можем сравнивать строки по значению, даже если они являются ссылочными типами:
s == "hello";//true
Это все еще не делает строку примитивным типом.
Принятый ответ на этот вопрос должен дать вам подробности об этом.